[Проблема выделения памяти] Необработанное исключение: исключение Microsoft C ++: std :: bad_alloc в области памяти - PullRequest
0 голосов
/ 13 сентября 2010

Я использую Visual Studio 2008 для разработки.Моя программа должна иметь дело с огромным объемом памяти.Ошибка происходит, когда моя программа пытается выделить 512M массив с плавающей точкой.Код следующий:

int size = 512*512*512;
float *buffer = new float[size];

До этого выделения программа уже занимала около 554М памяти.Мой рабочий стол имеет основную память 4G, и я использую Windows XP 32бит.

Как избежать ошибки выделения?Большое спасибо за ваш вклад!

1 Ответ

4 голосов
/ 13 сентября 2010

Вашему массиву требуется слишком много непрерывной памяти. В вашей программе доступно чуть менее 2 гигабайт виртуальной памяти, но это адресное пространство разбито на куски кода, данных и различные кучи. Память распределяется из свободного пространства между этими кусками. В 32-разрядной операционной системе вы можете получить ~ 650 МБ при немедленном выделении. Это идет на юг, когда ваша программа начинает использовать память. Сумма всех выделений памяти по-прежнему составляет ~ 2 ГБ.

Используйте 64-битную операционную систему или разделите ваши структуры данных. Утилита SysInternals VMMap может дать вам представление о сопоставлении виртуальной памяти вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...