Kcachegrind显示内存未对齐

kcachegrind showing my memcpy is unaligned

本文关键字:对齐 内存 显示 Kcachegrind      更新时间:2023-10-16

使用g++编译一个使用memcpy而在kcachegrind中显示为使用__memcpy_sse2_unaligned的函数

是否有办法让memcpy使用对齐的版本?

更新1:这是我如何创建两个缓冲区

int* dstArr = new int [0x10000];
int* srcArr = new int [0x10000];

名称__memcpy_sse2_unaligned的含义并不像您想象的那样。事实上,它只是memcpy的一个版本,使用SSE2进行未对齐的访问(在现代/大型cpu上,未对齐访问的代价通常低于软件中强制对齐的代价)。

您的编译器不认为它有智能来优化这么大的memcpy本身,amd64 ABI不提供承诺对齐的memcpy符号(如ARMEABI中的__aeabi_memcpy4__aeabi_memcpy8)。