Mremap «инициализирует» память при росте? - PullRequest
5 голосов
/ 02 ноября 2011

Если у меня есть mmap (), некоторые ЧАСТНЫЕ и АНОНИМНЫЕ страниц, а затем расширяют их с помощью mremap (), новое пространство также инициализируется нулями?

Я попытался прочитать код для mremap ( mm / mremap.c ) в исходном коде linux, но он требует определенных знаний о предметной области, которых у меня сейчас нет (vma _ ### stuff ). Даже не уверен, что это правильное место, чтобы посмотреть ...

Но из того, что я понял, я думаю , что mremap () ed память будет очищена, это правильно?

Распределение делается так

list = mmap(NULL, newSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)

и затем переназначение делается так

newList = mremap(list, oldSize, newSize, MREMAP_MAYMOVE)

А, наконец, это Linux специфический вопрос, работающий с последним ядром (> = 2.6.28) и libc (> = 2.11.1)

1 Ответ

4 голосов
/ 02 ноября 2011

Анонимные страницы - это сопоставления при записи универсальной нулевой страницы.Они всегда были (в каждой системе, а не только в Linux, которая предлагает анонимные сопоставления) и всегда будут.Когда mremap (или brk) расширяет анонимное сопоставление, вы получаете новые анонимные (нулевые) страницы.Нет необходимости инициализировать их самостоятельно.

...