使用g ++编译一个使用memcpy
的函数,在kcachegrind
中,它显示为使用__memcpy_sse2_unaligned
。
memcpy
是否有办法使用对齐版本?
更新1:这是我创建两个缓冲区的方式
int* dstArr = new int [0x10000];
int* srcArr = new int [0x10000];
答案 0 :(得分:5)
名称__memcpy_sse2_unaligned
并不代表您的想法。实际上,它只是memcpy
的一个版本,它使用SSE2进行未对齐的访问(在现代/大型CPU上,未对齐访问的代价通常低于强制在软件中对齐的代价)。
您的编译器认为它不具备优化如此大的memcpy
本身的智能,并且amd64 ABI不提供承诺对齐的memcpy
符号(如__aeabi_memcpy4
和{{ ARMEABI中的1}}。