Я хочу сопоставить файл (512 М) с общей памятью, чтобы каждый процесс мог получить к нему доступ. И я выбираю boost :: interprocess :: managed_mapped_file.
Я думаю, что общая память не должна воспринимать real
память, поскольку она разделяется несколькими процессами. Но когда я запускаю свою программу, кажется, что каждый процесс использует 512M памяти. И не хватает памяти для 20 процессов.
Итак, почему boost :: interprocess :: managed_mapped_file принимает реальную память, а не виртуальную память?
Я думаю, что общая память не должна принимать реальную память
Нет, вам понадобится до 512 миллионов "реальной" памяти (хотя это может быть выгружено в и из физической памяти по требованию). Каждый процесс будет использовать эту память.
кажется, что каждый процесс использовал 512 М памяти
Каждый из них будет иметь 512M разделяемой памяти, отображаемой в его виртуальное адресное пространство; по-видимому, то, что вы видите. Каждому отображению будет 512 МБ физической памяти.
И не хватает памяти для 20 процессов.
Вы говорите, что на самом деле у вас закончилась физическая память, как будто каждый процесс выделил 512M? Если каждый процесс принимает физическую память для себя, а не делится ею, то что-то происходит неправильно, когда вы создаете и обмениваетесь виртуальной памятью. Нам нужно будет понять, как вы это делаете, чтобы угадать, что может быть неправильным.