Реализации могут отличаться, но существуют некоторые основные идеи, которые следуют из требований.
сам объект исключения является объектом, созданным в одной функции, уничтоженной в вызывающей стороне этого. Следовательно, обычно не выполнимо создать объект на стеке. С другой стороны, много объектов исключения не являются очень большими. Следовательно, можно создать, например, 32-байтовый буфер и переполнение к "куче", если больший объект исключения на самом деле необходим.
Что касается фактической передачи управления, две стратегии существуют. Нужно записать достаточно информации в самом стеке для раскручивания стека. Это - в основном список деструкторов для выполнения и обработчики исключений, которые могли бы поймать исключение. Когда исключение происходит, отбегите стек, выполняющий те деструкторы, пока Вы не находите выгоду соответствия.
вторая стратегия перемещает эту информацию в таблицы вне стека. Теперь, когда исключение происходит, стек вызовов используется для обнаружения, какие объемы введены, но не выходятся. Они затем ищутся в статических таблицах для определения, где вызванная исключительная ситуация будет обработана, и который деструкторы, выполненные промежуточный. Это означает, что существует меньше исключения наверху на стеке; обратные адреса необходимы так или иначе. Таблицы являются дополнительными данными, но компилятор может поместить их в загруженный спросом сегмент программы.
Вам нужно что-то вроде
:mksession ~/mysession.vim
Затем вы можете позже получить этот файл vim, и у вас будет старый сеанс обратно:
:source ~/mysession.vim
или откройте vim с параметром -S:
$ vim -S ~/mysession.vim
Возможно, вы захотите установить эти параметры сеанса в вашем vimrc. Особенно раздражают параметры, когда вы изменили свой vimrc после сохранения сеанса.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds