有两个变量:
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/