Использование g ++ для компиляции функции, которая использует memcpy
, а в kcachegrind
отображается как с использованием __memcpy_sse2_unaligned
.kcachegrind, показывая мою memcpy, не имеет значения
Есть ли способ для memcpy
использовать выровненную версию?
Update 1: Это, как я создаю два буфера
int* dstArr = new int [0x10000];
int* srcArr = new int [0x10000];
Возможно, убедитесь, что буферы, которые вы копируете в и из которых гарантированно выровнены, каким-то образом компилятор узнает об этом. Как создать буферы сейчас? Как выглядит вызов в вашем коде? –
Обновлен код добавления буфера добавления. – MKaras
В большинстве систем и компиляторов основной распределитель должен возвращать адрес выравнивания при распределении памяти. Однако компилятор, возможно, не настолько уверен, что кажется, поэтому он делает безопасную вещь и вызывает встроенную функцию, оптимизированную для негласного копирования. И мы не знаем, проверяет ли эта функция выравнивание и обрабатывает случай, когда оба буфера выровнены. –