Максимальный размер блока памяти calloc/malloc c++
В последнее время я работаю с большими размерами динамических массивов в проекте, и в один момент у меня начала вылазить ошибка повреждения кучи, причем она происходила в библиотеке ntdll.dll, что для меня показалось очень странно, 100% нет выхода за рамки выделенного блока, я этот проверял несколько раз. Я стал грешить на то, что может у calloc есть лимит выделения, но в интернете особо не нашел точных данных, строка выделения памяти в программе выглядит примерно так:
while (array == NULL) array = (byte*)calloc(size_t(1000 * 1000), sizeof(byte*));
100% для выделения достаточно оперативной памяти. Вот кстати тот скрин с ошибкой
Ответы (1 шт):
Ограничение на размер выделяемого malloc/calloc
задается реализацией стандартной библиотеки. Конкретно для vc++ оно обозначено макросом _HEAP_MAXREQ
, который принимает значение 0xFFFFFFFFFFFFFFE0
на 64-битной системе, 0xFFFFFFE0
на 32-битной. То бишь на практике объем выделяемого блока ограничен только доступным свободным местом в оперативной памяти.
начала вылазить ошибка повреждения кучи
99% процентов, что она вызвана ошибками в коде.