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