LINUX.ORG.RU

mmap и реальная память


0

0

насколько мне известно
если мапим большой кусок памяти скажем гиг
то система будет реально выделять память
только при обращении к ней, а до это просто
резервируеться адресное пространство

вопрос вот в чем если я
запишу к примеру кусок в начале
кусок в средине и кусок в конеце
выделеного гига
системе придеться выделить мне гиг реальной памяти
или же только те страницы в которые была запись
выделяться а остальное останеться "виртуальным" ?

будет ли разница в поведении
при анонимном мапе или мапе на файл ?

anonymous

Ответ на: комментарий от xTERM

я рад что мое творчество узнаваемо хотелось бы еще только чето по сути услышать ;)

anonymous
()

> если мапим большой кусок памяти скажем гиг то система будет реально выделять память только при обращении к ней

зависит от настроек оверкоммита

> или же только те страницы в которые была запись

только те страницы

> будет ли разница в поведении при анонимном мапе или мапе на файл ?

Будет. В одном случае backing store для страницы является своп, а передаваемая процессу память инициализируется нулями, во втором backing store - файл, а передаваемая процессу память инициализируется содержимым файла.

P.S. асиль форматирование, Маяковский.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

а если я маплю на файл нулевого размера а затем по мере записи делаю ftruncate до нужного размера

что будет в этом случае при записи в конец таки системе придеться отдать мне гиг или всеже только тот кусок к которому обратился ?

кажись понял, только тут страницу и возможно если нету обращений потом система снова из реальной памяти эту страницу выкинет, я прав ?

P.S. что мне надо поправить в форматировании ? Без прикола, често недогоняю.

anonymous
()
Ответ на: комментарий от anonymous

> а если я маплю на файл нулевого размера а затем по мере записи делаю ftruncate до нужного размера

ХЗ. Попробуй :)

> только тут страницу и возможно если нету обращений потом система снова из реальной памяти эту страницу выкинет, я прав ?

Да. Только она может ее как выкинуть, так и записать обратно в файл или своп - зависит от опций mmap и наличия изменений.

man mmap

> P.S. что мне надо поправить в форматировании ? Без прикола, често недогоняю.

"(В режиме Tex paragraphs игнорируются переносы строк. Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования)"

Кнопка "Предпросмотр" есть. Что непонятно?

tailgunner ★★★★★
()
Ответ на: комментарий от idle

> this doesn't depend on sysctl_overcommit_memory.

Если верить документации, зависит.

> mmap() populates the VM if MAP_LOCKED || MAP_POPULATE, or if mlockall(MCL_FUTURE) was done, no?

Про mlockall - наверняка так и есть, про условия установки MAP_POPULATE не знаю.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

i bet this doc is wrong.

yes, mmap_region() fails if !__vm_enough_memory(), so mmap() can
succeed or return -ENOMEM depending on sysctl_overcommit_memory.

but it won't influence on whether the memory is allocated when
mmap() returns.

i'm sorry for my (poor) English btw.

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.