Возможно ли, что malloc () выделяет буфер, который перекрывает другой буфер, выделенный с помощью mmap ()? - PullRequest
4 голосов
/ 16 февраля 2012

Я планирую использовать mmap () для выделения буфера рядом с конкретным адресом.

Меня беспокоит то, что буфер, выделенный с помощью mmap (), будет перекрывать другие буферы, выделенные функцией malloc ()или новый оператор (C ++).Является ли это возможным?

Ответы [ 3 ]

6 голосов
/ 16 февраля 2012

Если вы используете MAP_FIXED для запроса mmap создания сопоставления по определенному адресу, то да, возможно , что вы перезаписываете существующее сопоставление, например пространство, выделенное malloc, частьраздел кода или данных совместно используемой библиотеки и т. д. Обычно использование MAP_FIXED всегда является ошибкой, если только вы не получили диапазон адресов с помощью вызова mmap без указания MAP_FIXED (так что вы знаете, что он принадлежит вам);в этом случае вы можете преднамеренно перезаписать части сопоставления, используя MAP_FIXED).

Все остальные ответы, казалось, упускали тот факт, что вы сказали «близко к определенному адресу», что для меня подразумевает MAP_FIXED,Если вы не используете MAP_FIXED, уточните, как вы получаете сопоставление «близко к определенному адресу».

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

Нет, этого не происходит.

Куча, поддерживаемая функцией malloc, живет в виртуальных отображениях, которые были установлены с помощью brk или mmap, поэтому области памяти могут быть повторно использованы, только если ядро ​​выдало один и тот же блок через mmap дважды.

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

Вы должны выделить выделенную память с помощью malloc. неправильно распределенная память не будет перекрываться Так что нет, все будет хорошо.

...