Плохое размещение в vector.resize () - PullRequest
0 голосов
/ 03 ноября 2018

Я попробовал следующий код C ++ в Visual Studio 2017 (версия для сообщества):

vector <int> V;
V.resize(600000000);
for (int i = 0;i < 600000000;i++)
{
    if (i % 10000000 == 0)cout << i << endl;
}

но получил:

исключение: std :: bad_alloc в ячейке памяти

Я изменил резервный размер кучи, размер фиксации кучи, резервный размер стека и размер фиксации стека в свойствах (проекта) -> Linker-> Система огромна: 1000000000. Также я изменил «Общий размер файла подкачки для всех дисков» до 100 ГБ ОЗУ (у меня есть виртуальная машина с 120 ГБ ОЗУ) в панели управления. Это не сработало.

Есть ли какой-нибудь способ иметь возможность поместить более 600000000 целых чисел в вектор?

1 Ответ

0 голосов
/ 03 ноября 2018

Убедитесь, что вы компилируете 64-битный двоичный файл, а не 32-битный.

600.000.000 целых чисел - 2.400.000.000 байтов (~ 2 ГБ), что по умолчанию слишком много для 32-разрядного двоичного файла.

Если вам требуется более 2 ГБ в 32-битном двоичном файле, вы можете связать, используя флаг / LARGEADDRESSAWARE в Visual Studio

Редактировать: Как упоминалось Дедупликатор , флаг, вероятно, не будет работать в этом примере в 32-битной версии. Лучшее решение - создать 64-битный двоичный файл.

...