【发布时间】:2015-08-23 15:07:54
【问题描述】:
使用 g++ 编译使用 memcpy 的函数,在 kcachegrind 中显示为使用 __memcpy_sse2_unaligned。
memcpy 有没有办法使用对齐的版本?
更新 1:这就是我创建两个缓冲区的方式
int* dstArr = new int [0x10000];
int* srcArr = new int [0x10000];
【问题讨论】:
-
可能通过确保您复制的缓冲区保证对齐,编译器会识别它。您现在如何创建缓冲区?您的代码中的调用是什么样的?
-
更新添加缓冲区创建代码。
-
在大多数系统和编译器上,底层分配器在分配内存时应该返回一个对齐地址。但是,编译器可能看起来并不那么确定,所以它会做一些安全的事情并调用为非对齐复制优化的内置函数。而且我们不知道该函数是否检查对齐并处理两个缓冲区对齐的情况。