2012-02-16 3 views
4

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

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

ответ

1

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

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

+0

Этот ответ неверен, если вы используете 'MAP_FIXED' ... –

+0

@R, вы в этом уверены. –

1

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

6

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

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

Смежные вопросы