当前位置 : 主页 > 网络安全 > 测试自动化 >

memcpy性能与字节移位

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