Действительно разветвляется (), сразу копируют всю "кучу" процесса в Linux?
===========================================================================

4 ГБ являются тоннами RAM. Вы не должны рассматривать "легкие" дистрибутивы вообще. Крупный проект является крупным проектом, но мне немного любопытно относительно того, почему Вы полагаете, что работа над каждый требует соответственно большой суммы RAM, потому что обычно это не делает. Я сделал R на материале R в прошлом, и я знаю, что это не свет ресурса, но это не требует бункера с мейнфреймом в нем также.

Единственные люди, которым нужны больше чем 4 ГБ на отдельном пользователе система Linux, являются людьми, которые сделали что-то смешное, играют в видеоигры, выполняют несколько виртуальных полей плюс проигрывание видеоигр плюс выполнение чего-то смешного - не разработчики программного обеспечения. Я почти любил бы оправдание закончиться и купить еще 4 ГБ - в конце концов, это дешево, и у меня есть больше пустых слотов на материнской плате, и затем я мог сказать, ничего себе, система на 8 ГБ! Но истина является половиной из этого, никогда не привыкал бы, таким образом, нет никакого смысла.

Просто выберите дистрибутив. Выберите *любой* дистрибутив. Сойти с ума.

 

  *вся*  из  `fork()`  реализована с помощью mmap / копирования при записи. 

Это влияет не только на кучу, но и на разделяемые библиотеки, стек, области BSS. 

Что, кстати, означает, что вилка является чрезвычайно легкой операцией, до тех пор, пока результирующие 2 процесса (родительский и дочерний) на самом деле не начнут запись в диапазоны памяти. Эта особенность является основной причиной летальности fork-bombs - вы получаете слишком много процессов до того, как ядро перегрузится репликацией страницы и дифференциацией. 

Вам будет трудно найти в современной операционной системе пример операции, в которой ядро выполняет бумажную копию (исключение составляют драйверы устройств) - просто намного, намного проще и эффективнее использовать функциональность ВМ. 

 Даже `execve()` по сути "пожалуйста, mmap двоичного / ld.so / whatnot, follow follow follow to execute" - и ВМ обрабатывает фактическую загрузку процесса в оперативную память и его исполнение. Локальные неинициализированные переменные в конце концов mmap-файлы получают из "нулевой страницы" - специальной страницы с нулями, содержащей только для чтения, локальные инициализированные переменные в конце концов mmap-файлы (копирование на запись, опять же) из самого бинарного файла и т.д. 

 

 Linux делает копирование в записи. Как  `Вилка  создает новый процесс, выделенные страницы помечены как четко и разделяются между родителем и ребенком. Когда любой из них пытается изменить страницу, неисправность страницы сгенерирована в результате копирования страницы и соответствующим образом регулирования таблицы страницы.` 



 Ядро Linux делает реализует копирование в записи, когда  `вызывается вилкой ()` . Когда Syscall выполняется, страницы, которые родитель и доля дочерней доли отмечены только для чтения. 

 Если запись выполняется на странице только для чтения, то она скопирована, так как память больше не идентична двух процессах. Следовательно, если выполняются только операции чтения, страницы вообще не будут скопированы.