Может ли это вырасти до 4 ГБ?
Размер адресного пространства ограничен числом уникальных значений указателя. Для 32-разрядного процессора 32-разрядное значение может представлять 2 ^ 32 различных значения. Если вы позволите каждому такому значению обращаться к разному байту памяти, вы получите 2 ^ 32 байта, что равно четырем гигабайтам.
Итак, да, виртуальное адресное пространство процесса теоретически может увеличиться до 4 ГБ. Однако в действительности это также может зависеть от системы и процессора. Как видно:
Однако этот теоретический максимум не может быть достигнут на процессорах класса Pentium. Одна из причин заключается в том, что младшие биты значения сегмента кодируют информацию о типе селектора. В результате из 65536 возможных значений селектора только 8191 из них могут использоваться для доступа к данным пользовательского режима. Это опустит вас до 32 ТБ.
Обратите внимание, что есть два способа выделить память из системы, вы, конечно, можете выделить память для вашего процесса неявно , используя C malloc
(ваш вопрос помечен c ), но явно отображает байт файла.
Есть ли ограничения на количество процессов в такой системе?
процесс включает в себя один или несколько потоков, которые фактически выполняют код в процессе (технически процессы не запускаются, потоки выполняются) и которые представлены объектами потоков ядра.
Согласно некоторым тестам, проведенным здесь , 32-разрядная система Windows XP с 2 ГБ адресного пространства по умолчанию может создать приблизительно 2025 потоков:

Однако 32-разрядный тестовый предел работает на 64-разрядной Windows XP с выделенным 4 ГБ адресного пространства.
создано около 3204 тем:

Однако точный предел потока и процесса чрезвычайно изменчив, это зависит от множества факторов. Способ, которым потоки задают размер своего стека, способ, которым процессы задают их минимальный рабочий набор, объем доступной физической памяти и предел системной фиксации. В любом случае вам обычно не нужно беспокоиться об этом на современных системах, поскольку, если ваше приложение действительно превышает ограничение потока, вы должны переосмыслить свой дизайн, поскольку почти всегда есть альтернативные способы достижения того же самого голов с разумным количеством.