Ограничение зависит от операционной системы. Стандартный Linux - 2 Гб, Solaris - 3 Гб, Windows - (мне сказали) - 2 или 3 в зависимости от того, как используется PAE.
Однако вы не получаете все эти 2G для своих данных. Ваш код возьмет часть этого, и стек вашей программы возьмет некоторые, и библиотека C возьмет некоторые, как и любые другие совместно используемые библиотеки, на которые вы ссылаетесь. Обычно ОС организует код, кучу и стек таким образом, чтобы между ними были преднамеренные пробелы.
Что касается вашего последнего вопроса: это все виртуальная память. На самом деле вы спрашиваете: «Если программы на моем компьютере будут использовать всю эту физическую память, будет ли ОС использовать подкачку». И ответ - да, но не совсем так, как вы думаете.
CPU может обращаться только к физической памяти. Он ничего не знает о данных, хранящихся на диске. Таким образом, чтобы предоставить физическую память запущенному процессу, ОС заберет эту память у другого процесса . Для того, чтобы взять память, он напишет ее для обмена. Когда этот другой процесс должен получить доступ к памяти, ОС зачитывает его обратно, потенциально записывая память какого-либо другого процесса для подкачки.