據我瞭解使用C的std :: bad_alloc的異常當程序運行的內存++被觸發。 有沒有一種方法來監視多少記憶中留下有和觸發特殊程序,我們到達的不歸路之前?福西的std :: bad_alloc的在C++
回答
不,但您可以註冊一個處理程序0123',全局operator new()
的默認實現在循環中執行,直到處理程序不返回或沒有其他處理程序註冊。處理程序本身可能會嘗試釋放更多內存,或發佈日誌消息或其他類似內容。
多少內存的細節可爲您分配功能依賴極重度的平臺和操作系統上,雖然,所以不要抱太大的期望。
例如,對超額訂購的存儲系統,您的分配可能成功,但你的程序仍然可以死,因爲系統內存不足。
隨着過量使用,您的程序可以一樣好,即使它不分配內存死,因爲一些其他* *過程吃光了所有的餡餅。 –
@SteveJessop:啊,是的,挺。我想重點是,在普通的桌面操作系統上,將系統範圍的內存管理整合到自己的應用程序中很困難(也許你應該不打擾?)。 –
@SteveJessop:C++規範是否允許「overcommit」?我不認爲它確實如此......除非我錯過了它,否則任何地方都不會讓你的進程崩潰,只是因爲它觸及了由'new'正確返回的內存。嚴格地說,啓用overcommit的Linux不是一個合格的C++平臺。或者我錯了? – Nemo
- 1. C++異常:std :: bad_alloc
- 2. C++奇怪的std :: bad_alloc異常
- 3. C++未處理的異常:std :: bad_alloc
- 4. QPlainTextEdit扔std :: bad_alloc
- 5. std :: bad_alloc ulimit
- 6. 使用MPI:C++的std :: bad_alloc的
- 7. 奇怪的std :: bad_alloc的
- 8. std :: bad_alloc錯誤與std :: vector
- 9. std ::排序獲取std :: bad_alloc
- 10. Java程序中的'std :: bad_alloc'
- 11. std :: bad_alloc之後std :: vector的狀態
- 12. 在boost :: archive :: binary_iarchive上std :: bad_alloc
- 13. 的std :: bad_alloc的:: bad_alloc的。」:不能訪問類中聲明私有成員‘的std :: bad_alloc的’
- 14. 從堆棧分配C++ std :: bad_alloc?
- 15. 對C指針使用std :: bad_alloc
- 16. Node.js錯誤「拋出std :: bad_alloc實例後終止what():std :: bad_alloc」
- 17. C++異常(的std :: bad_alloc的)處理在objC++
- 18. C++ bad_alloc異常
- 19. 的std :: bad_alloc的分配從參考
- 20. va_arg會導致std :: bad_alloc
- 21. std :: vector bad_alloc不使用push_back
- 22. std :: bad_alloc但最終作品
- 23. Mergemap終止拋出'std :: bad_alloc'
- 24. ASIO寫操作拋出的std :: bad_alloc的:C++
- 25. 內存位置的另一個std :: bad_alloc
- 26. 有C#的東西像C++ std :: equal_range?
- 27. 錯誤:std :: bad_alloc在內存位置0x0038fd50
- 28. std :: bad_alloc在內存位置0x002b123c
- 29. 如何用C++中的自定義消息來拋出std :: bad_alloc?
- 30. 程序中的C++向量std :: bad_alloc錯誤
您可以捕獲該異常並調用釋放你的一些動態內存的那麼特殊的程序。 – moooeeeep
它依賴於系統,也取決於內核在需要時可以釋放的緩存。 –
在標準C++中,唯一的方法是嘗試分配一個大數組,然後捕獲'bad_alloc'異常。但是在一個多線程程序中,答案可能會在你使用它之前發生改變......所以你實際上是在問錯誤的問題。 – Nemo