c - memcpy 性能与字节移位

标签 c memory-management memcpy

有两个变量:

uint32_t var32 = 0xAABBCCDD;
uint8_t var8[4] = { 0, 0, 0, 0 };

将var32复制到var8哪种方式会更快?

for (size_t i = 0; i < sizeof(uint32_t); i++)
    var8[i] = (uint8_t)(var32 >> (i * 8));

memcpy(var8, &var32, sizeof(uint32_t));

我将不胜感激所有提示。

最佳答案

假设一个 32 位架构,memcpy 归结为单个 mov(或类似的)指令。所以它更快。但这也是错误的。从 C 的角度来看,您正在调用实现定义的行为。现实中可能发生的情况是您的字节顺序错误,具体取决于您使用的是 big endian 还是 little endian 平台。因此,只需使用移位解决方案而不用担心性能。

关于c - memcpy 性能与字节移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31671331/

相关文章:

c++ - 在 C++ 中分配内存时发出 SIGKILL

c - "space bar"之后扫描字符终止的问题

手动创建和运行可执行文件

c - 我应该在使用数据上的 DB_DBT_MALLOcflags调用 DB->put 后​​释放数据吗?

Java:线程本地内存分配和可扩展性

glibc - 是否可以静态链接 libstdc++ 并包装 memcpy?

c - memcpy() 通过引用而不复制?

c - 如何根据另外两根字符串制作一根字符串?

c - 如何使用printf调试linux内核的汇编代码

opencl - 内存复制速度对比 CPU<->GPU