SSE: загрузка и сохранение без выравнивания, пересекающие границу страницы

Я где-то читал, что перед выполнением выровненной загрузки или сохраняю рядом с границей страницы (например, используя_mm_loadu_si128 / _mm_storeu_si128 intrinsics), код должен сначала проверить, принадлежит ли весь вектор (в данном случае 16 байтов) одной и той же странице, и переключиться на не-векторные инструкции, если нет. Я понимаю, что это необходимо для предотвращения coredump, если следующая страница не принадлежит процессу.

Но что, если обе страницы принадлежат процессу (например, они являются частью одного буфера, и я знаю размер этого буфера)? Я написал небольшую тестовую программу, которая выполняла загрузку и сохранение без выравнивания, которые пересекали границу страницы, и она не вылетала. Должен ли я всегда проверять границы страницы в таком случае, или этого достаточно, чтобы не переполнить буфер?

Env: Linux, x86_64, gcc

Ответы на вопрос(1)

Ваш ответ на вопрос