В которой области памяти создаются экземпляры классов исключений?

Я не мог найти информацию, где экземпляры класса исключений создаются во время обработки исключений? В которой области памяти (стек, "куча", статическое устройство хранения данных, и т.д.)? Я предполагаю, что это не находится на стеке из-за раскручивания стека...

7
задан tommyk 12 February 2010 в 14:15
поделиться

4 ответа

Из стандарта:

15.2.4: Память для временной копии создаваемого исключения выделяется в неопределенном способом, , кроме случаев, указанных в п. 3.7.3.1.

И 3.7.3.1 говорит:

3.7.3.1: Все объекты, которые не имеют ни динамической продолжительности хранения, ни являются локальными, имеют статическую продолжительность хранения. Хранение для этих объектов должно длиться в течение продолжительности программы (3.6.2, 3.6.3).

5
ответ дан 7 December 2019 в 03:15
поделиться

Ответ - «в загадочной области, управляемой компилятором» - серьезно, в стандарте не указано, где они должны храниться.

3
ответ дан 7 December 2019 в 03:15
поделиться

Исключения всегда генерируются по значению, поэтому нет проблем, даже если они размещены в стеке

0
ответ дан 7 December 2019 в 03:15
поделиться

Цитируется кухня из стандарт, это не указано. Большинство реализаций выделяют их из кучи, поскольку они должны выжить в процессе раскрутки стека, который может удалить кадры стека (при выбросе за пределы функции) или создать новые (вызов деструкторов и т. Д.). GCC использует встроенную функцию __ cxa_allocate_exception для выделения памяти.

1
ответ дан 7 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: