Плохое размещение в 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-битный бинарный файл.