Hay configuración del núcleo
/ proc / sys / vm / overcommit_memory
Cita de excelente artículo :
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.)
Esto se aplica tanto a las horquillas como a los malloc regulares. Es decir, si lo establece en 0, la bifurcación se copiará al escribir. Copiar al escribir significa que una vez que la aplicación se bifurca, ambas copias compartirán las páginas de memoria del niño o del original y comenzarán a cambiar la memoria.
En la mayoría de las distribuciones, sé que el exceso de compromiso es 0. Pero si lo configura en 2, todas las páginas de memoria estarán completamente respaldadas por memoria real y, en algunos casos, bajo presión de memoria alta, serán más estables, pero algunos programas (me enfrenté a gitk) que dependen en sobrecompromisos fallará.
If enough is available the kernel will commit to the full virtual size of the parent for both processes after the fork.
Si, gracias. Esto significa que la reducción de la huella virtual del proceso en un entorno con memoria limitada (RAM e intercambio) podría resolver el problema de no poder bifurcar.