Да он делает.
http://man7.org/linux/man-pages/man2/mmap.2.html
В случае наиболее «популярных» NULL отображения
Если указан адрес NULL, то ядро выбирает адрес, с которого создать отображение; это самый переносимый способ создания нового отображения . Если addr не является NULL, то ядро принимает его как подсказку о том, где разместить сопоставление; на Linux, отображение будет , созданное на ближайшей границе страницы. Адрес нового сопоставления - , возвращенный в результате вызова.
Даже если вы уточнить MAP_FIXED чем
Не интерпретировать адрес как намек: место отображение точно, что адрес. addr должен быть кратным размеру страницы. Если область памяти , заданная с помощью addr и len, перекрывает страницы любых существующих сопоставлений , тогда перекрывающаяся часть существующих сопоставлений будет отбрасываться . Если указанный адрес не может быть использован, mmap() будет сбой. Поскольку для фиксированного адреса для сопоставления требуется меньше , использование этого параметра не рекомендуется.
Принимая тот факт, наименьшую страницы 4096B (для x86, но и для других платформ это кратно 1024b валиков в любом случае) и, как станд :: max_align_t, скорее всего, будут 1 на 64-битных системах будут выровненными.
Я не знаю, гарантировано ли это, но так как это подкреплено аппаратными возможностями, я был бы очень удивлен, если бы это не так. –
[эта ссылка] (http://stackoverflow.com/questions/31411730/mmap-enforce-64k-alignment) может помочь. Quoated: адрес контраста, возвращенный mmap, гарантируется только выравниванием по странице. – felix
@felix Страница man для 'munmap()' говорит 'Параметр addr не был выровнен по странице (т. Е. Кратно размеру страницы).', Что означает, что я не могу освободить память, которая не выровнена на границе страницы, и поскольку граница страницы больше, чем максимальное выравнивание, я не буду называть 'munmap()' в том случае, если указатель не выровнен по максимальному выравниванию – Curious