Какой объем оперативной памяти может выделить приложение в 64-разрядных системах Linux x86?

Какой объем оперативной памяти может выделить приложение в 64-разрядных системах Linux x86?

Правда ли, что одно приложение не может выделить более 2 GiB, даже если в системе есть на GiB больше свободной памяти при использовании 32-битного ядра x86 PAE Linux? Ослабляется ли это ограничение 64-битными ядрами x86 Linux?

решение1

32-битный процесс имеет 32-битное адресное пространство по определению: «32-битный» означает, что адреса памяти в процессе имеют ширину 32 бита, и если у вас есть 2 32 отдельных адреса, вы можете адресовать максимум 2 32 байта (4 ГБ). 32-битное ядро ​​Linux может выполнять только 32-битные процессы. В зависимости от параметров компиляции ядра каждый процесс может выделять только 1 ГБ, 2 ГБ или 3 ГБ памяти (остальное зарезервировано для ядра, когда оно обрабатывает системные вызовы). Это объем виртуальной памяти, не связанный с каким-либо распределением между ОЗУ, подкачкой и mmapped-файлами.

64-битное ядро ​​может запускать как 64-битные, так и 32-битные процессы. 64-битный процесс может адресовать до 2 64 байт (16EB) в принципе. Наархитектура x86_64, отчасти из-за конструкции x86_64ММУs, в настоящее время существует ограничение в 128 ТБ адресного пространства на процесс.

решение2

32-разрядные процессы могут выделять только до 1, 2, 3 или около 4 ГБ, в зависимости от того, какое разделение памяти было выбрано при сборке 32-разрядного ядра. 32-разрядные процессы на 64-разрядном ядре могут выделять около 4 ГБ. 64-разрядные процессы на 64-разрядном ядре x86-64 могут выделятьдо 128ТиБ.

Связанный контент