В С++, когда приложение вызывает exit (3), деструкторы в стеке должны быть запущены для разматывания стека?
Ответ 1
Нет, большинство деструкторов не запускаются на exit().
С++ 98 §18.3/8 обсуждает это.
По существу, когда exit называется статическим объектом, уничтожаются, обрабатываются обработчики atexit, открываются потоки C и закрываются, а файлы, созданные с помощью tmpfile, удаляются. Локальные автоматические объекты не уничтожаются. I.e., нет разматывания стека.
Вызов abort позволяет еще меньше: нет очистки вообще.
Ответ 2
Если ваша ОС разумна (Unix, Linux или недавняя Windows), вызов exit() указывает ядру де-распределить всю память процессов. Стек не нужно разматывать; он просто перестанет существовать.