memcpy性能与字节移位

Bre*_*men 4 c memory-management memcpy

有两个变量:

uint32_t var32 = 0xAABBCCDD;
uint8_t var8[4] = { 0, 0, 0, 0 };
Run Code Online (Sandbox Code Playgroud)

哪个var32到var8的复制方式会更快?

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

要么

memcpy(var8, &var32, sizeof(uint32_t));
Run Code Online (Sandbox Code Playgroud)

我会很感激所有的提示.

小智 5

假设采用32位架构,则memcpy归结为单个mov(或类似)指令.因此,它速度更快.但这也是错的.从C的角度来看,您正在调用实现定义的行为.实际上可能发生的是你的字节被错误地排序,这取决于你是在大端还是小端平台上.因此,只需使用位移解决方案而不是担心性能.

  • 如果你*知道你的代码正在执行的机器的字节序,那么`memcpy`将按预期工作.从C标准的角度来看,它仍然是未定义的行为.如果您认为代码是真正的**性能瓶颈,那么您应该只考虑这种依赖于平台的优化****. (2认同)