kcachegrind 显示我的 memcpy 未对齐

kcachegrind showing my memcpy is unaligned

使用 g++ 编译使用 memcpy 的函数,在 kcachegrind 中显示为使用 __memcpy_sse2_unaligned.

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

更新 1:这就是我创建两个缓冲区的方式

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

名称__memcpy_sse2_unaligned并不代表您认为的那样。事实上,它只是 memcpy 的一个版本,它使用 SSE2 进行未对齐访问(在 modern/large CPU 上,未对齐访问的惩罚通常低于软件中强制对齐的惩罚)。

您的编译器不认为它有能力优化如此大的 memcpy 本身,并且 amd64 ABI 不提供承诺对齐的 memcpy 符号(如 __aeabi_memcpy4__aeabi_memcpy8 在 ARMEABI 中)。