Вот официальный источник, в котором указано, что максимальный размер запроса кучи определяется вашей связанной библиотекой CRT (кроме вашего предыдущего кода с целочисленными переполнениями, равными 0, поэтому вы не вернули NULL) (_HEAP_MAXREQ).
http://msdn.microsoft.com/en-us/library/6ewkz86d.aspx
Ознакомьтесь с моим ответом здесь для больших оконных окон, я включаю ссылку на MS-документ о продвижении модели памяти в Vista / 2008.
Короче говоря, стандартная CRT не поддерживает даже для собственного 64-битного процесса любой размер кучи, превышающий 4 ГБ. У вас есть для использования VirtualAlloc * или CreateFileMapping или некоторых других аналогов.
О, я также заметил, что вы утверждаете, что ваши большие ассигнования действительно успешны, это на самом деле неправильно, вы неправильно интерпретируете malloc (0x200000000); (это 8gb в шестнадцатеричном формате), происходит то, что вы запрашиваете 0-байтовое распределение из-за приведения или какого-либо другого эффекта вашего тестового жгута, вы совершенно определенно не наблюдаете что-либо больше, чем фиксируемая куча 0xfffff000 байтов, это просто вы видите целочисленные переполнения при приведении.
СЛОВО ДЛЯ ПОТЕРЯ или * СОВЕТЫ, ЧТОБЫ СПАСИТЬ ВАШУ КУХНУЮ САНИТИЮ *
ТОЛЬКО СПОСОБ ВЫДЕЛЕНИЯ ПАМЯТИ С MALLOC (ИЛИ ДРУГОЙ ДИНАМИЧЕСКОЙ ЗАПРОС)
void *foo = malloc(SIZE);
ЗНАЧЕНИЕ ДИНАМИЧЕСКОГО ЗАПРОСА ПАМЯТИ НИКОГДА НЕ ДОЛЖНО (Я НЕ МОГУ УКАЗАТЬ ЭТОГО ДОСТАТОЧНО) РАСЧЕТАТЬСЯ В "()" ПАРЕНСКОМ ЗАПРОСЕ
mytype *foo = (mytype *) malloc(sizeof(mytype) * 2);
Опасность заключается в переполнении integer .
Это всегда кодировка ОШИБКА для выполнения арифметики во время вызова, вы ДОЛЖНЫ ВСЕГДА вычислять ОБЩУЮ СУММУ данных, которые должны быть запрошены до оператор, который оценивает запрос.
Почему это так плохо? Мы знаем, что это ошибка, потому что в момент, когда запрос сделан для динамических ресурсов, должен быть точкой в будущем, где мы будем использовать этот ресурс.
Чтобы использовать то, что мы просили, мы должны знать, насколько оно велико? (например, количество массивов, размер шрифта и т. д.).
Это будет означать, что если мы когда-либо увидим какую-либо арифметику внутри () запроса ресурса, это будет ошибкой, поскольку мы ДОЛЖНЫ дублируем этот код снова в порядке использовать эти данные соответствующим образом.