Плохое размещение в vector.resize()

Я попробовал следующий код 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->System: огромный: 1000000000. Кроме того, я изменил "Общий размер файла подкачки для всех дисков" на 100 ГБ ОЗУ (У меня есть виртуальная машина с 120 ГБ оперативной памяти) в панели управления. Это не сработало.

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

1 ответ

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

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

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

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

Другие вопросы по тегам