1

я выделил массив двойников выровненный до 32 байт сПочему vmovapd вызывает segfault?

double *dst; 
posix_memalign((void**)&dst, 32, 4*sizeof(double)); 

позже я использую _mm256_store_pd(dst,q); и получить случайные ошибки сегментации в инструкции

vmovapd YMMWORD PTR [rdi],ymm0 

Почему происходят здесь выдаёт ошибку сегментации? Может ли vmovapd вызвать segfault по другой причине, кроме выравнивания?

+1

'Может ли vmovapd вызывать segfault по другой причине, кроме выравнивания?' Да, на указателях NULL (или других недопустимых доступах). Используйте отладчик и посмотрите на RDI в том месте, где он неисправен, чтобы увидеть, было ли оно неверно или просто неверно. (Попробуйте использовать команду 'x' gdb, чтобы сбросить память там. Если gdb говорит о некорректном доступе, то вы знаете, что это плохой указатель, даже если он выровнен.) –

+0

@PeterCordes Спасибо, я проверил, что указатели действительны. Я рассмотрел дамп ядра и обнаружил, что в одном случае я передавал неверный указатель. – stardt

ответ

1

Произошла ошибка в другом месте кода, который вызвал неправильный указатель, который будет использоваться. Как указал Питер Кордес, другая причина могла быть неверным указателем.

 Смежные вопросы

  • Нет связанных вопросов^_^