Предположим, что я делаю (Unlighted) упакованную нагрузку _MM256_Loadu_pd на двойном (см. Сплы кода ниже). Наручает ли это правило строгого псевдонимы или иным образом к иным образом к неопределенному поведению в соответствии с стандартом C ++? Разве это не должно вызвать ошибку сегментации в теории? (Это полезно, когда, скажем, загрузка 3 удвоения за один раз.) < /P>
Следующий код компилируется без предупреждений (GCC -142.1 G ++ -Mavx -Ппеллиантично -wall ) и работает нормально (на GNU/Linux 6.13.2-Arch1-1):
Код: Выделить всё
#include
#include
int main() {
double* ptr = new double {};
double buf[4];
_mm256_storeu_pd(buf, _mm256_loadu_pd(ptr));
delete ptr;
std::printf("%e\n", buf[3]);
}
< /code>
Нет никаких сегментов. Асан (-fsanitize=address
) Сообщается о переполнении буфера кучи. Мой вопрос больше похож на то, почему эта нагрузка разрешена (ядро? Разве это не дает мне доступ к памяти, которой я не владею?
Подробнее здесь:
https://stackoverflow.com/questions/794 ... e-segfault