在 Linux 系统中,当一个程序正常结束时,它会调用 exit() 函数
- 当 main() 函数返回时,编译器会自动生成一个调用 exit() 函数的代码。
- 当程序中显式调用 exit() 函数时。
exit() 函数的主要任务是清理程序运行过程中分配的资源,并关闭已打开的文件和网络连接等。在 exit() 函数内部,会按照以下顺序执行:
-
调用所有已注册的 atexit() 函数。这些函数通常用于执行一些特定的清理工作,例如释放内存、关闭文件等。
-
析构全局对象。C++ 程序中的全局对象会在 main() 函数执行之前构造,当程序结束时,它们会按照相反的顺序(后构造的先析构)进行析构。这意味着,在 exit() 函数调用之前,所有全局对象都已经完成了析构过程。
-
关闭所有打开的文件描述符。
-
释放程序占用的内存资源。
-
关闭所有网络连接。
-
终止进程,返回操作系统。
因此,在 exit() 函数被调用之前,全局对象的析构已经完成。这意味着,在程序结束时,所有全局对象都已经被正确地销毁和清理。这有助于确保程序资源的正确管理和避免内存泄漏等问题。