Сбой realloc / HeapRealloc даже при наличии достаточного объема памяти - PullRequest
2 голосов
/ 08 декабря 2010

Моя машина имеет 8 ГБ оперативной памяти и работает под управлением Windows Server 2008. malloc / realloc () не удается выделить больше памяти, когда моему приложению уже выделено 1,5 ~ 1,7 ГБ. Я попытался переключиться на HeapAlloc / HeapRealloc вместо этого, и такая же ситуация происходит.

Есть что-то, чего мне здесь не хватает? Что может быть причиной того, что мое приложение не может выделить больше памяти, когда имеется четко доступная оперативная память?

Ответы [ 3 ]

4 голосов
/ 08 декабря 2010

Неважно, сколько у вас оперативной памяти на вашем компьютере. Каждый 32-разрядный процесс в Windows получает 4 ГБ адресного пространства, из которых 2 ГБ доступно в пользовательском адресном пространстве. Таким образом, память для вашей программы (включая ее код, загруженные библиотеки DLL, стек и т. Д.) Будет выделяться только из этого пространства. Поскольку вы приближаетесь к пределам виртуального адресного пространства, выделение памяти не выполняется.

2 голосов
/ 08 декабря 2010

По умолчанию в 32-битной ОС Windows вы можете использовать 2DB для одного процесса. Если вы используете компилятор MSVC, вы должны установить опцию LARGEADDRESSAWARE .

1 голос
/ 08 декабря 2010

Что может быть причиной того, что мое приложение не может выделить больше памяти при наличии четко доступной памяти?

Фрагментация кучи .Распределение не просто требует памяти.Он просит непрерывный кусок памяти.

Конечно, учитывая редкие данные, которые вы предоставили ( сколько вы пытаетесь перераспределить, когда это произойдет? Это 32-битное или 64-битное приложение?), Могут быть и другие проблемы.

...