Мне неизвестна какая-либо действительная система, в которой выровненный адрес виртуальной памяти может привести к смещению адреса физической памяти.
Как правило, все выравнивания на данной платформе имеют степени двойки.Например, в 32-разрядных целых числах x86 естественное выравнивание составляет 4 байта (2 ^ 2).Размер страницы, который определяет, насколько точно блок можно отобразить в физической памяти, обычно равен большой степени двух.На x86 наименьший допустимый размер страницы составляет 4096 байт (2 ^ 12).Самый большой тип данных, который может нуждаться в выравнивании на x86, составляет 128 бит (для регистров XMM и CMPXCHG16B) 32 байта (для AVX) - 2 ^ 5.Поскольку 2 ^ 12 делится на 2 ^ 5, вы обнаружите, что все выровнено в самом начале страницы, а поскольку страницы выровнены как в виртуальной, так и в физической памяти, виртуально выровненный адрес всегда будет физически выровненным.
На более практическом уровне, позволяя выровненным виртуальным адресам сопоставляться с невыровненными физическими адресами, не только затрудняется создание кода, но и архитектура ЦП более сложная , чем просторазрешение любого выравнивания (так как теперь у нас есть страницы нечетного размера и другие странности ...)
Обратите внимание, что у вас может быть причина требовать большего выравнивания, чем время от времени страница.Как правило, для кодирования пространства пользователя не имеет значения, выравнивается ли это в физической ОЗУ (в этом случае, если вы запрашиваете несколько страниц, это вряд ли будет даже непрерывным!).Проблемы здесь возникают, только если вы пишете драйвер устройства и вам нужен большой, выровненный, непрерывный блок для прямого доступа к памяти.Но даже тогда, как правило, устройство не является сторонником выравнивания размером больше, чем размер страницы.