Há configuração do kernel
/ proc / sys / vm / overcommit_memory
Citação de excelente artigo :
Since 2.5.30 the values are: 0 (default): as before: guess about how much
overcommitment is reasonable, 1: never refuse any malloc(), 2: be precise
about the overcommit - never commit a virtual address space larger than swap
space plus a fraction overcommit_ratio of the physical memory. Here
/proc/sys/vm/overcommit_ratio (by default 50) is another user-settable
parameter. It is possible to set overcommit_ratio to values larger than 100.
(See also Documentation/vm/overcommit-accounting.)
Isso se aplica a garfos, bem como malloc regular. Ou seja, se você definir como 0, o fork será copiado na gravação. Copiar na gravação significa que, uma vez que o aplicativo é bifurcado, as duas cópias compartilharão as páginas de memória úteis, ou o original começará a mudar a memória.
Na maioria das distribuições, eu sei que o overcommit é 0. Mas se você o definir como 2, todas as páginas de memória serão totalmente apoiadas por memória real e, em alguns casos, sob alta pressão de memória, serão mais estáveis, mas alguns programas (eu enfrentei o gitk) que dependem em supercomissões falhará.
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.Sim obrigado. Significando que a redução da área de cobertura virtual do processo em um ambiente com memória limitada (RAM e troca) poderia resolver o problema de não conseguir fazer uma bifurcação.