Архитектура вашей машины, операционная система (но две переплетены), а ваш компилятор/набор библиотек определяет, сколько памяти вы можете выделить сразу.
malloc
не необходимо, чтобы иметь возможность использовать всю память, которую может предоставить ОС. OS не необходимости сделать доступной всю память, присутствующую в машине (и различные версии Windows Server, например, имеют различную максимальную память for licensing reasons)
Но обратите внимание, что ОС может разместить более чем тот, который присутствует в аппарате, и даже больше памяти, чем тот, который разрешен материнской платой (предположим, что на материнской плате имеется один слот для памяти, в котором используется только 1 ГБ флэш-памяти, Windows все равно позволяет программе выделять 2 ГБ памяти). Это делается с использованием виртуальной памяти, пейджинга (вы знаете, файл подкачки, ваш старый и медленный друг :-) Или, например, с использованием NUMA.
Посмотрите на исправление, которое я сделал по вашему вопросу – xanatos
ОС. это лишь некоторые дополнительные символы, потому что комментарий был недостаточно длинным. –
@xanatos Значит, size_t может быть больше, чем нужно для этого? –