为什么 memcpy() 和 memmove() 比指针增量更快?

2023-11-24

我正在复制 N 个字节pSrc to pDest。这可以在单个循环中完成:

for (int i = 0; i < N; i++)
    *pDest++ = *pSrc++

为什么这比memcpy or memmove?他们使用什么技巧来加快速度?


因为 memcpy 使用字指针而不是字节指针,所以 memcpy 实现也经常用SIMD指令可以一次洗牌 128 位。

SIMD 指令是汇编指令,可以对最多 16 字节长的向量中的每个元素执行相同的操作。这包括加载和存储指令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 memcpy() 和 memmove() 比指针增量更快? 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 重载<<的返回值

    include
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 单个 Git 存储库中的公共和私有代码

    我参与的一个研究小组目前将所有代码托管在一个私有 SVN 存储库中 我们想开放我们的代码并将大部分代码移至 Github 上 问题是 有些代码是敏感的 不应该开放 但我们仍然希望它处于版本控制之下 目前 我们在 Github 上有开放代码
  • WPF:PropertyChangedCallback 仅触发一次

    我有一个用户控件 它公开一个名为 VisibileItems 的 DependencyProperty 每次更新该属性时 我都需要触发另一个事件 为了实现这一点 我添加了带有 PropertyChangedCallback 事件的 Fram
  • 限制对 Elastic Beanstalk 的 HTTP 访问

    是否可以将对 Elastic Beanstalk 应用程序的 HTTP 访问限制为仅某些 IP 地址 我已尝试向环境的安全组添加规 则 但这些规则似乎没有任何效果 这是因为所有 HTTP 流量都是通过弹性负载均衡器路由的吗 isn t安全组
  • C# 继承和默认构造函数

    假设有一个基类A和一个班级B源自A 那么我们知道类的构造函数A永远不会被类继承B 然而 当一个新对象B创建 然后 类的默认构造函数A在类的默认 自定义构造函数之前调用B被调用 也许这样做的目的是类的字段A需要初始化为默认值 现在 假设该类A
  • 如何在 Kubernetes Pod 之间共享存储?

    我正在评估 Kubernetes 作为我们新应用程序的平台 现在看来 一切都非常令人兴奋 但是 我遇到了一个问题 我在 GCE 上托管集群 并且需要某种机制在两个 pod 持续集成服务器和我的应用程序服务器 之间共享存储 使用 kubern
  • 起订量索引属性并在返回/回调中使用索引值

    我想要起订量一个具有索引的属性 并且我希望能够在回调中使用索引值 就像您可以在回调中使用起订量方法的方法参数一样 可能最容易用一个例子来演示 public interface IToMoq int Add int x int y int t
  • Android + Proguard + Apache POI

    有人能够在混淆后让 Apache POI 库正常工作 我查阅了很多资料 尝试了不同的方法 但仍然得到错误 a a b a Provider com bea xml stream EventFactory not found org apac
  • 使用 Sed 替换包含字符串的整行

    我有一个文本文件 其中有一个特定的行 例如 sometext sometext sometext TEXT TO BE REPLACED sometext sometext sometext 我需要将上面的整行替换为 This line i
  • 智能感知中的自定义代码片段

    我已经开始将一些常用的代码块导出到自定义片段 有没有办法让这些显示在 IntelliSense 中 而不必使用上下文菜单或代码片段管理器中的代码片段浏览器 起初 我以为这与 ReSharper 有关 但当我禁用 ReSharper Inte
  • Android webkit 浏览器中的宽度不正确

    我注意到 Android 默认浏览器上有一个问题 100 宽度实际上可能会超出屏幕边缘 这是一个最小的测试用例 div class separator width 100 style border 2px padding 2px nbsp
  • 如何编写一个返回仅存在于类中的类型的成员函数?

    我实际上正在用 C 实现一个双向链表 这是某种 MWE namespace mynamespace template
  • 哪里有可靠的注册表项来查找 Excel 2007 的安装位置?

    哪里有可靠的注册表项来查找 Excel 2007 的安装位置 怎么样 HKEY LOCAL MACHINE SOFTWARE Microsoft Office X 0 Common InstallRoot 其中包含一个名为 Path 的键
  • django-rest-framework:如何序列化已包含 JSON 的字段?

    我对 django rest framework 很陌生 所以需要一些帮助 我有一个带有 TextField 的对象 该对象是包含 JSON 的字符串 我正在使用 django rest framework 将整个对象序列化为 JSON 然
  • 为什么禁止内联脚本(内容安全策略)?

    我想知道规范中的引用 https dvcs w3 org hg content security policy raw file tip csp specification dev html 为了获得最大的好处 作者需要将所有内联脚本和样式
  • Keras:制作神经网络来查找数字的模数

    我是一位经验丰富的 Python 开发人员 但在机器学习方面完全是新手 这是我第一次尝试使用 Keras 你能告诉我我做错了什么吗 我正在尝试制作一个神经网络 它接受二进制形式的数字 并在除以 7 时输出其模数 我的目标是执行一个非常简单的
  • HTTP重定向代码之间的区别

    我不清楚各种 HTTP 3XX 重定向代码之间的差异 是的 我已经阅读了规范 但标准与实际实践之间似乎存在一些差异 The 301重定向代码似乎足够清楚 这意味着资源已永久移动到另一个 URI 并且将来的请求应使用该 URI And the
  • IIS HTTP 到 HTTPS 相对重定向

    我最近为我的网站获得了 SSL 证书 并希望将所有流量重定向到 HTTPS 我已经拥有了一切要去的地方https mydomain com但如果有人进来http mydomain com anotherpage它会删除其他页面 只将用户带到
  • 是否有一种相对简单的方法可以在 C# 或 PowerShell 中完成 CD 或 DVD?

    首先 对术语进行一些澄清 经过最终确定 我的意思并不是要结束会议 而是要结束会议 我的意思是 将导出内容写入 CD 或 DVD 时 信息将无法再通过通常的方式 Roxio Nero Windows 资源管理器等 添加到其中 我对此做了相当多
  • 获取字符串中某个索引之后第一个检测到的空格的索引

    在要格式化的字符串中 主要是用不同的符号替换字符以在 UI 上进行渲染测试 我必须检测 然后跳过此 字符中的第一个空格的所有字符 并且必须对字符串中的所有实例重复该操作 E g abcd 1 s efgh 2 d ijkl在这个字符串中 我
  • 为什么 memcpy() 和 memmove() 比指针增量更快?

    我正在复制 N 个字节pSrc to pDest 这可以在单个循环中完成 for int i 0 i lt N i pDest pSrc 为什么这比memcpy or memmove 他们使用什么技巧来加快速度 因为 memcpy 使用字指