Приложение C ++ превышает память, но не использует виртуальную память

StackOverflow https://stackoverflow.com/questions/3451765

Вопрос

У меня есть приложение, которое выделяет память с «новым» и освобождает их с «удалением» в некоторых частях кода. Проблема в том, что всякий раз, когда он превышает предел памяти системы (скажем, 2 ГБ), Windows отправляет сигнал убийства к процессу. Я думаю, что это не обычно, поскольку он должен использовать пространство подкачки (я думаю, что в Windows это называется виртуальная память), верно? Мое приложение написано в C ++ / Visual Studio.

Это было полезно?

Решение

Вот как вы можете сделать его до 3 ГБ для процесса; Это абсолютный максимум, который вы можете иметь его для 32-битных приложений Windows. Любые больше, и вам нужно использовать 64 битную версию Windows.

Это много памяти. Может быть, вы могли бы рассмотреть возможность разделения приложения в несколько процессов и общаться между ними.

Другие советы

ОС не убивает ваше приложение, делает необработанное исключение. Вы захотите проверить ваше приложение с Perfmon, и посмотрите эти счетчики, рабочий набор, виртуальные байты, частные байты. Вы получите исключения, когда ваши зарезервированные байты приближаются к 2 ГБ. Таким образом, ваши преданные байты и баран BYTES намного меньше.

Вот хорошая статья о виртуальном адресном пространстве, в том числе совершенных против зарезервированных.

Мораль этой истории, не пытайтесь выделить, когда зарезервированные байты приближаются к 2 ГБ, для 32-битного процесса.

Windows не использует сигналы. Вы должны получить исключение STD :: Badalloc, когда у вас закончится память. Который, когда не связано, автоматически запустится функция завершения (). Исключение видно в выходном окне.

Я не выглядел слишком близко к этому, но вы можете найти ответы, которые вы хотите здесь:

Можете ли вы выделить очень большой единый кусок памяти (> 4 ГБ) в C или C ++?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top