В чем причины неудачи malloc(), особенно в 64 бит?
Моя конкретная проблема заключается в попытке malloc огромного объема памяти объемом 10 ГБ на 64-битной системе. Аппарат имеет 12 ГБ оперативной памяти и 32 ГБ свопа. Да, malloc экстремален, но почему это проблема? Это в Windows XP64 с компиляторами Intel и MSFT. Иногда malloc преуспевает, иногда нет, около 50%. 8GB mallocs всегда работают, 20-мегабайтные mallocs всегда терпят неудачу. Если malloc терпит неудачу, повторные запросы не будут работать, если я не выйду из процесса и не начну новый процесс еще раз (это будет иметь успех 50% при успешном завершении). Никаких других больших приложений не работает. Это происходит даже сразу после новой перезагрузки.
Я мог представить, что malloc не работает в 32 бит, если вы использовали 32 (или 31) бита адресного пространства, чтобы не было достаточного диапазона адресов, чтобы назначить ваш запрос.
Я мог бы также предположить, что malloc не удастся, если вы использовали свое физическое ОЗУ и пространство подкачки на жестком диске. Это не относится ко мне.
Но почему еще может произойти сбой malloc? Я не могу думать о других причинах.
Меня больше интересует общий вопрос malloc, чем мой конкретный пример, который я, скорее всего, заменю на файлы с отображением памяти. Проваленный malloc() - это скорее головоломка, чем что-либо еще... это желание понять ваши инструменты и не удивляться основам.