Это просто озадачивает меня сейчас.
На работе у нас есть пакет приложений, работающих вместе, и памяти не хватает. В то время как проблема заключается в том, чтобы заставить пакет приложений работать 64-битно (и, таким образом, иметь возможность работать за пределами 2 Go, которые есть у нас на обычной ОС Win32), и / или сократить использование памяти, эта проблема «Как выздороветь от ООМ "не уйдет из моей головы.
Конечно, у меня нет решения, но я все еще играю в поиске C ++ (в основном из-за RAII и исключений).
Возможно, процесс, который должен корректно восстанавливаться, должен прервать свою обработку в атомарных / откатных задачах (т. Е. С использованием только функций / методов, дающих надежную / не исключительную гарантию исключений) с резервным буфером / пулом памяти для целей восстановления. .
В случае сбоя одной из задач C ++ bad_alloc размотает стек, освободит часть памяти стека / кучи через RAII. После этого функция восстановления будет в максимально возможной степени спасать (сохранять исходные данные задачи на диске для последующего использования) и, возможно, зарегистрировать данные задачи для последующей попытки.
Я верю, что использование сильных / nothrow гарантий C ++ может помочь процессу выжить в условиях низкой доступной памяти, даже если это будет похоже на обмен памяти (т. Е. Медленный, несколько не отвечающий и т. Д.), Но, конечно, Это всего лишь теория. Мне просто нужно разобраться с предметом, прежде чем пытаться смоделировать это (т.е. создать программу на C ++ с настраиваемым распределителем new / delete с ограниченной памятью, а затем попытаться выполнить некоторую работу в этих стрессовых условиях).
Ну ...