有两个变量: 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 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的角度来看,您正在调用实现定义的行为.实际上可能发生的是你的字节被错误地排序,这取决于你是在大端还是小端平台上.因此,只需使用位移解决方案而不是担心性能.