Инициализирует ли mremap память при росте?

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

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

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

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

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)


person Sven Almgren    schedule 02.11.2011    source источник


Ответы (1)


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

person R.. GitHub STOP HELPING ICE    schedule 02.11.2011
comment
Ага. Все, кроме нуля страниц, также будет дырой в безопасности. - person Zan Lynx; 02.11.2011
comment
Вы ошибаетесь насчет сопоставления копирования при записи универсальной нулевой страницы. По крайней мере, в Linux mmap() работает иначе. Вы получаете отображение физических страниц при первом доступе к отображаемой памяти, и это обработчик ошибок страниц ядра, который обнуляет физическую страницу и отображает ее. Универсальная нулевая страница не используется. - person Maxim Egorushkin; 02.11.2011
comment
Вы уверены? Конечно, для анонимных сопоставлений только для чтения не создается физическая страница для каждой страницы. То, что я сказал, определенно верно в некотором смысле, если вы включите объединение дубликатов страниц, но в целом я могу ошибаться; Я не пробовал RTFS и не тестировал его. - person R.. GitHub STOP HELPING ICE; 03.11.2011
comment
Не важно, откуда обнуление для этого вопроса, важно только то, что оно очищено, звучит так, как будто оно очищено по крайней мере... - person Sven Almgren; 03.11.2011