Я хочу выделить и инициализировать довольно большой кусок непрерывной памяти (~ 1 ГБ), затем пометить его как доступный только для чтения и обработать несколько (скажем, несколько десятков) дочерних процессов, которые будут его использовать, не создавая своих собственных копий память (машине не хватит памяти для этого).
Правильно ли я считаю, что если я malloc
памяти, как обычно, пометить ее как доступную только для чтения с помощью mprotect(addr, size, PROT_READ)
, а затем fork
, это позволит дочерним процессам безопасно использовать память, не вызывая ее копирование? (При условии, что я ничего не пытаюсь записать в выделенную память после вызова mprotect
).
edit: Спасибо за все ответы.
Следующий вопрос - я планировал использовать shmget
, но я подумал, что он использовал mm
и, таким образом, будет ограничен меньшими выделениями (см. Ограничения раздел этой страницы ). Например, /proc/sys/kernel/shmmax
- 32 МБ на сервере, которым я пользуюсь. Но я хочу 1 ГБ непрерывной памяти. Я не прав насчет этого ограничения?