您的位置:首页 > 大数据 > 人工智能

【转载】为什么每个C程序都需要一个叫做main的函数

2018-03-31 19:56 316 查看
本文转载:https://blog.csdn.net/xtydtc/article/details/53572455
当加载器运行时,它创建一个如下图的运行时存储器映像(存在一段较短的时间,在虚拟地址空间上)。在可执行文件中段头部表的指导下,加载器将可执行文件的的相关内容拷贝到代码和数据段,然后加载器跳转到程序的入口点,也就是符号_start的地址。在_start地址处的启动代码(startup code)是在目标文件ctr1.o(参考下面代码)中定义的,对所有C程序都是一样的。它会最终调用应用程序的main函数。除了一些头部信息,在加载过程中没有任何从磁盘到存储器的数据拷贝。直到CPU引用一个被映射的虚拟页才会进行拷贝,此时,操作系统利用它的页面调度机制自动将页面从磁盘传送到存储器。 


0x080480c0 <_start>:          /* Entry point in .textca */
call __libc_init_first    /* Start code in .text */
call _init                /* Startup code in .init */
call atexit               /* Startup code in .text */
call main                 /* Application main routine */
call _exit                /* Returns control to OS */
1
2
3
4
5
6
有了上述的基础之后,我们很自然的可以回答题目中的问题,C的启动代码对于每个C程序都是相同的,要跳转到一个叫做main的函数上。 
另外一个问题main函数要不要return的问题,如果以return结尾,那么控制传递给启动程序,该程序通过调用_exit再将控制返回给操作系统。如果用户省略了return,也会发生同样的事情,因为是本质是过程调用。如果main以调用exit终止,那么exit将通过调用_exit将控制返回给操作系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐