Максимальный размер блока памяти calloc/malloc c++

В последнее время я работаю с большими размерами динамических массивов в проекте, и в один момент у меня начала вылазить ошибка повреждения кучи, причем она происходила в библиотеке ntdll.dll, что для меня показалось очень странно, 100% нет выхода за рамки выделенного блока, я этот проверял несколько раз. Я стал грешить на то, что может у calloc есть лимит выделения, но в интернете особо не нашел точных данных, строка выделения памяти в программе выглядит примерно так:

while (array == NULL) array = (byte*)calloc(size_t(1000 * 1000), sizeof(byte*));

100% для выделения достаточно оперативной памяти. Вот кстати тот скрин с ошибкой Тот самый скрин с ошибкой


Ответы (1 шт):

Автор решения: user7860670

Ограничение на размер выделяемого malloc/calloc задается реализацией стандартной библиотеки. Конкретно для vc++ оно обозначено макросом _HEAP_MAXREQ, который принимает значение 0xFFFFFFFFFFFFFFE0 на 64-битной системе, 0xFFFFFFE0 на 32-битной. То бишь на практике объем выделяемого блока ограничен только доступным свободным местом в оперативной памяти.

начала вылазить ошибка повреждения кучи

99% процентов, что она вызвана ошибками в коде.

→ Ссылка