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)
和所有"哪个更快?"一样 问题,你应该对它进行基准测试,以便亲眼看看.如果它很重要,那么问问为什么并挑选你想要的东西.
在任何情况下,您的第一个示例是技术上未定义的行为,因为您违反了严格别名.因此,如果您必须选择没有基准测试,请使用第二个.
要回答实际问题,哪个更快可能取决于对齐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中)显示具有默认优化的完全相同的程序集.所以你可以期待性能相同.