最近我在一个powerpoint演示文稿中发现了这一点:
当程序被编译和链接时,链接器会在程序中插入一些额外的代码。正是这段代码调用了主要的功能与用户调用“较低功能”的方式大致相同。
额外的代码有两个功能:
- 确保C程序在正确的环境中运行
- 成功终止后的清理
在此之前,我认为清理是内核的工作。什么是正确的故事?
答案1
内核和 C 运行时都完成一些工作。
C 运行时执行内核不执行的一些操作:它运行先前注册的处理程序atexit()
,并安排整数返回值 frommain()
返回到系统,就像使用 一样exit()
。
当然,最终内核将获得所有资源(文件、内存),无论用户态做什么或不做什么。