Приложение C ++ превышает память, но не использует виртуальную память
-
27-09-2019 - |
Вопрос
У меня есть приложение, которое выделяет память с «новым» и освобождает их с «удалением» в некоторых частях кода. Проблема в том, что всякий раз, когда он превышает предел памяти системы (скажем, 2 ГБ), Windows отправляет сигнал убийства к процессу. Я думаю, что это не обычно, поскольку он должен использовать пространство подкачки (я думаю, что в Windows это называется виртуальная память), верно? Мое приложение написано в C ++ / Visual Studio.
Решение
Вот как вы можете сделать его до 3 ГБ для процесса; Это абсолютный максимум, который вы можете иметь его для 32-битных приложений Windows. Любые больше, и вам нужно использовать 64 битную версию Windows.
Это много памяти. Может быть, вы могли бы рассмотреть возможность разделения приложения в несколько процессов и общаться между ними.
Другие советы
ОС не убивает ваше приложение, делает необработанное исключение. Вы захотите проверить ваше приложение с Perfmon, и посмотрите эти счетчики, рабочий набор, виртуальные байты, частные байты. Вы получите исключения, когда ваши зарезервированные байты приближаются к 2 ГБ. Таким образом, ваши преданные байты и баран BYTES намного меньше.
Мораль этой истории, не пытайтесь выделить, когда зарезервированные байты приближаются к 2 ГБ, для 32-битного процесса.
Windows не использует сигналы. Вы должны получить исключение STD :: Badalloc, когда у вас закончится память. Который, когда не связано, автоматически запустится функция завершения (). Исключение видно в выходном окне.
Я не выглядел слишком близко к этому, но вы можете найти ответы, которые вы хотите здесь:
Можете ли вы выделить очень большой единый кусок памяти (> 4 ГБ) в C или C ++?