Нет ничего более простого ...
Страницы памяти лениво выделяются. Процесс может malloc () большое количество памяти и никогда не использовать его. Таким образом, в вашей системе 500MB_RAM + 500MB_SWAP я мог бы - по крайней мере теоретически - выделить 2 гигабайта памяти из кучи, и все будет идти весело, пока я не попытаюсь использовать слишком много этой памяти. (В этот момент любой процесс, который не может получить больше страниц памяти, обнуляется. Надеюсь, это мой процесс. Но не всегда.)
Отдельные процессы могут быть ограничены 4 гигабайтами как ограничение жесткого адреса в 32-битных системах. Даже если у вас более 4 ГБ ОЗУ на машине и вы используете эту причудливую сегментированную 36-битную жестокость от схемы адресации ада, отдельные процессы по-прежнему ограничены только 4 гигабайтами. Некоторые из этих 4 концертов должны идти на общие библиотеки и программный код. Так что до 2-3 гигабайт стека + куча в качестве ограничения адресации.
Вы можете mmap файлы, эффективно давая вам больше памяти. Это в основном действует как дополнительный обмен. То есть Вместо того, чтобы загружать данные двоичного кода программы в память и затем выгружать их в файл подкачки, файл просто отображается. При необходимости страницы помещаются в оперативную память непосредственно из файла.
Вы можете заняться некоторыми интересными вещами с разреженными данными и разреженными файлами mmapped. Я видел, как X-windows требовал огромного использования памяти, хотя на самом деле он занимал совсем немного.
Кстати: " free " может вам помочь. Как и " cat / proc / meminfo " или Vm строк в / proc / $ PID / status . (Особенно VmData и VmStk .) Или, возможно, " ps up $ PID "