Использует ли boost managed_mapped_file мою физическую память? [Дубликат]

0

Я хочу сопоставить файл (512 М) с общей памятью, чтобы каждый процесс мог получить к нему доступ. И я выбираю boost :: interprocess :: managed_mapped_file.

Я думаю, что общая память не должна воспринимать real память, поскольку она разделяется несколькими процессами. Но когда я запускаю свою программу, кажется, что каждый процесс использует 512M памяти. И не хватает памяти для 20 процессов.

Итак, почему boost :: interprocess :: managed_mapped_file принимает реальную память, а не виртуальную память?

  • 0
    Просто попробуйте. Я думаю, что вы ошиблись набором virt с зарезервированным / совершенным набором.
  • 0
    Да, он использует вашу физическую память, но только столько, сколько доступно. В противном случае незаблокированные страницы (которые могут быть всеми ими) будут выгружены из физической памяти. Конечно, страницы будут по-прежнему отображаться в вашем виртуальном адресном пространстве, пока вы не удалите их. Замена грязных страниц требует записи, а замена страниц требует чтения, поэтому слишком мало физических страниц, доступных для «возврата» виртуального сопоставления файлов, может привести к очень плохой производительности.
Теги:
boost
memory
mmap

1 ответ

1

Я думаю, что общая память не должна принимать реальную память

Нет, вам понадобится до 512 миллионов "реальной" памяти (хотя это может быть выгружено в и из физической памяти по требованию). Каждый процесс будет использовать эту память.

кажется, что каждый процесс использовал 512 М памяти

Каждый из них будет иметь 512M разделяемой памяти, отображаемой в его виртуальное адресное пространство; по-видимому, то, что вы видите. Каждому отображению будет 512 МБ физической памяти.

И не хватает памяти для 20 процессов.

Вы говорите, что на самом деле у вас закончилась физическая память, как будто каждый процесс выделил 512M? Если каждый процесс принимает физическую память для себя, а не делится ею, то что-то происходит неправильно, когда вы создаете и обмениваетесь виртуальной памятью. Нам нужно будет понять, как вы это делаете, чтобы угадать, что может быть неправильным.

  • 0
    Нет, вам понадобится 512M «реальной» памяти - это не точно. Это требуется только в том случае, если вы используете VirtualLock или помните их
  • 0
    @sehe: Действительно, я немного ослабил свой язык и надеялся, что значение будет достаточно ясным. Под «вам понадобится реальная память», я имел в виду «вам понадобятся страницы, выделенные для той части памяти, которая используется, каждая из которых будет нуждаться в физической памяти в момент обращения к ней».
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню