[英]What happens if my app is out of memory?
如果我的應用程序內存不足,當我調用new()時,我將獲得異常,而malloc()將獲得0指針。
但是,如果我調用帶有局部變量的方法怎么辦? 它們也占用內存。 有什么方法可以為“普通”變量保留內存嗎? 這樣即使new()拋出異常,我也可以捕獲它,修復問題並像往常一樣調用方法。
您的數據通過以下三種方式之一分配:
但是,除非執行一些繁重的遞歸操作,否則通常不應該用完堆棧空間。
C ++語言不提供任何用於為局部變量保留內存的機制。 您的特定C ++實現和/或操作系統可以提供一些增加總堆棧大小的方法,但這通常不是必需的。
還要注意,如果對new的調用確實失敗了,從恢復中恢復實際上幾乎沒有什么可做的。 許多人(包括我在內)不再費心檢查新的故障。
New從堆中分配內存,但是本地var通常在堆棧上-可能會溢出,但可能性較小,具體取決於您的平台。 您能否提供更多詳細信息?
編譯器知道每個堆棧需要多少內存。 但是,足夠多的堆棧(由於遞歸導致)將使程序崩潰—可能沒有其他方法可以解決此問題。
該標准有一個有趣的附件,稱為“ 實施數量” 。 這是非規范性的(信息性的),因此不應將其視為絕對真理,而應為您提供一個公正的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.