main函数之前会执行什么?
2014-10-04 00:22
204 查看
我们 看下面的例子: /* file name test00.c */ int main(int argc, char* argv) { return 0; } 编译链接它: cc test00.c -o test.exe 会生成 test.exe 但是我们加上这个选项: -nostdlib (不链接标准库) cc test00.c -nostdlib -o test.exe 链接器会报错: undefined symbol: __start 也就是说: 1. 编译器缺省是找 __start 符号,而不是 main 2. __start 这个符号是程序的起始点 3. main 是被标准库调用的一个符号 通常,我们会在编译器的环境中找到一个名字类似于 crt0.o 的文件,这个文件中包含了我们刚才所说的 __start 符号。 那么真正的 crt0.s 是什么样子呢?下面我们给出部分伪代码: /////////////////////////////////////////////////////// section .text: __start: : init stack; init heap; open stdin; open stdout; open stderr; : push argv; push argc; call _main; (调用 main) : destory heap; close stdin; close stdout; close stderr; : call __exit; //////////////////////////////////////////////////// 总结: main函数执行之前,主要就是初始化系统相关资源: 1.设置栈指针 2.初始化static静态和global全局变量,即data段的内容 3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容 4.运行全局构造器,估计是C++中构造函数之类的吧 5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数 main 函数之后会执行相反的工作。
相关文章推荐
- 什么会在main函数之前执行
- main函数之前都执行了什么?
- iOS程序main函数之前发生了什么
- main函数之前执行代码
- 全局对象的构造函数会在main函数之前执行?
- linux中在main函数之前执行其他函数实现
- 全局对象的构造函数会在main函数之前执行?
- (转载)如何让一段程序在main函数之前执行
- main函数之前发生了什么
- 《Linux内核设计的艺术》学习笔记(一)从开机加电到执行main函数之前的过程
- Cpp深入:就要在main函数之前执行
- main函数之前做了什么?
- 一个c程序在执行main函数之前和main之后都做了那些事情啊
- linux0.11内核学习笔记__从开机加电到执行main函数之前的过程
- c++中static变量在main函数之前执行
- 【转】从开机加电到执行main函数之前的过程
- main函数之前--真正的函数执行入口或开始
- 在main函数之前执行一些函数
- 开机加电到执行main函数之前的过程
- main函数之前究竟发生了什么?