分配与mempcy - 在这种情况下会更快

Eri*_*pir -1 c c++ optimization memcpy

哪两个更快:?

1.

char* _pos ..;
short value = ..;

*((short*)_pos = va;
Run Code Online (Sandbox Code Playgroud)

2.

char* _pos ..;
short value = ..;

memcpy(_pos, &value, sizeof(short));
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 8

和所有"哪个更快?"一样 问题,你应该对它进行基准测试,以便亲眼看看.如果它很重要,那么问问为什么并挑选你想要的东西.

在任何情况下,您的第一个示例是技术上未定义的行为,因为您违反了严格别名.因此,如果您必须选择没有基准测试,请使用第二个.


要回答实际问题,哪个更快可能取决于对齐pos.如果它正确对齐,那么1可能会更快.如果没有,则2可能会更快,具体取决于编译器如何优化它.(如果硬件不支持错位访问,则1甚至可能崩溃.)

但这都是猜测工作.你真的需要对它进行基准测试才能确定.
至少,您应该查看已编译的程序集:

:     *(short *)_pos = value;

mov WORD PTR [rcx], dx
Run Code Online (Sandbox Code Playgroud)

:     memcpy(_pos, &value, sizeof(short));

mov WORD PTR [rcx], dx
Run Code Online (Sandbox Code Playgroud)

在这种情况下(在MSVC中)显示具有默认优化的完全相同的程序集.所以你可以期待性能相​​同.