В стандартном 32-битном ядре x86 smp каждый процесс может использовать 3 ГБ адресного пространства 4 ГБ, а 1 ГБ используется ядром (совместно используемым в адресном пространстве каждого процесса).
С 4G/ 4G разделяет 32-разрядное ядро x86 типа "mememem ", каждый процесс может использовать (почти) все 4 ГБ адресного пространства, а ядро имеет отдельное 4 ГБ адресного пространства.Это ядро поддерживалось Red Hat в RHEL 3 и 4, но они удалили его в RHEL 5, потому что патч не был принят в основное ядро, и большинство людей все равно теперь используют 64-битные ядра.
С 64-битное ядро x86_64, 32-битный процесс может использовать все адресное пространство 4 ГБ, за исключением пары страниц (8 КБ) в конце адресного пространства 4 ГБ, которые управляются ядром.Само ядро использует часть адресного пространства, которая находится за пределами 4 ГБ, доступной для 32-битного кода, поэтому это не уменьшает адресное пространство пользователя.64-разрядный процесс может использовать гораздо больше адресного пространства (128 ТБ в RHEL 6).
Обратите внимание, что часть адресного пространства будет использоваться программным кодом, библиотеками и пространством стека, поэтому вы не будетебыть в состоянии malloc()
все ваше адресное пространство.Размер этих вещей зависит от программы.Посмотрите на /proc/<pid>/maps
, чтобы увидеть, как адресное пространство используется в вашем процессе;сумма, которую вы можете malloc()
, будет ограничена наибольшим неиспользованным диапазоном адресов.