У меня есть большой динамически распределяемый массив (C++, MSVC110), и я инициализирую его следующим образом:
try {
size_t arrayLength = 1 << 28;
data = new int[arrayLength];
for (size_t i = 0; i < arrayLength; ++i) {
data[i] = rand();
}
}
catch (std::bad_alloc&) { /* Report error. */ }
Все было хорошо, прежде чем я попытался выделить больше, чем фактическая оперативная память системы, например 10 ГБ. Я ожидал поймать исключение bad_alloc
, но система (Win7) начала меняться как сумасшедшая и т. д., вы знаете, о чем я говорю.
Затем я проверил ситуацию в своем диспетчере задач и заметил интересную вещь, в режиме отладки выделение было мгновенным, а в релизе - постепенным.
Режим отладки:
Режим выпуска:
Что вызывает это? Может ли это негативно сказаться на производительности? Я сделал что-то не так? Является ли причиной этого ОС? Или распределитель С++?
На самом деле я бы предпочел получить исключение, если памяти недостаточно, а не переходить к бесконечному циклу подкачки. Есть ли способ добиться этого на С++?
Я знаю, что одним из решений может быть отключение подкачки в Windows, но это решит проблему только для меня.