有2个变量:

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 的角度来看,您正在调用实现定义的行为来执行此操作。现实中可能发生的情况是您的字节顺序错误,这取决于您使用的是大端还是小端平台。因此,只需使用位移位解决方案,而不必担心性能。

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

10-10 04:33