2010-02-12 50 views

回答

5

從標準沒有問題:

15.2.4:對於被拋出的異常的臨時副本的內存是 分配以非特定的方式,除了3.7.3.1中提到的以外, 。

而且3.7.3.1說:

3.7.3.1:所有的對象既不具有動態 存儲時間也不是地方有 靜態存儲時間。這些對象的存儲 將持續該程序的持續時間 (3.6.2, 3.6.3)。

3

答案是「在由編譯器管理的神祕區域中 - 嚴格地說,標準沒有指定它們必須存儲在哪裏。

0

例外總是被拋出價值因此,即使分配在堆棧

1

是廚房引用的標準,沒有具體說明。大多數實現從堆中分配它們,因爲它們需要在堆棧展開過程中生存,這可能會刪除堆棧框架(當向函數外部拋出時)或創建新框架(調用析構函數等)。 GCC使用內置功能__cxa_allocate_exception來分配內存。