Чем posix_memalign отличается от mmap - PullRequest
0 голосов
/ 26 февраля 2012

Чем posix_memalign с размером выравнивания 4096 байт отличается от mmap? Использует ли он внутри mmap или какой-то другой механизм?

Ответы [ 3 ]

5 голосов
/ 26 февраля 2012

posix_memalign - это API более высокого уровня, чем mmap, предназначенный для взаимодействия с malloc, free и realloc. Использование mmap более сложно, потому что оно предлагает больше функциональных возможностей, чем posix_memalign (отображение файлов в адресное пространство процесса). Как это реализовано (в терминах mmap или иным образом), не определено стандартом POSIX.

Используйте posix_memalign там, где вы использовали бы malloc, если у вас не было ограничений на выравнивание.

1 голос
/ 26 февраля 2012

Чем posix_memalign с размером выравнивания 4096 байт отличается от mmap?

Очевидный ответ: posix_memalign не может отображать произвольные файлы с помощью fd. :)

Что касается поведения распределения posix_memalign против mmap (MAP_ANOYMOUS): я не вижу требования, чтобы posix_memalign (size) использовал mmap. Он также может использовать механизм sbrk совместно с / от malloc и вернуть вам правильно выровненный указатель на часть области brk.

1 голос
/ 26 февраля 2012

Если доступно mmap, posix_memalign обычно реализуется с использованием mmap.Основное отличие состоит в том, что posix_memalign находится в stdlib.h, где mmap - системный вызов, который может быть недоступен и иметь разную семантику на разных платформах.

...