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 中)。
使用 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 中)。