C++程序进入main函数之前,退出main函数之后会做些什么?
2015-11-08 10:40
225 查看
我们看下面的例子: /* 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 函数之后会执行相反的工作。
相关文章推荐
- 设计模式C++实现——工厂模式
- C++ MFC多文档嵌入python
- C++继承、虚继承、虚函数类的大小问题
- c++类成员函数后边加const
- c++和c混合编程
- C++ code Summary --- 2015.11.8
- C/C++语法高阶:const的应用,const在类中的体现
- C++: 拷贝管理
- [并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例]
- [并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)调用复制文件接口的案例]
- c++ 11 数组 和lambda表达式 语法 / 函数包装器 基本用法
- 编译原理(一) Chomsky文法的判断方法及C++代码实现
- Effective C++ 笔记 第三部分 资源管理
- c++在类的内部访问全局变量
- To be a better man!
- 用C语言写的ATM程序
- C++实现单链表
- c语言之const理解
- C/C++基础面试题
- c++调用ado执行带参数的sql(非存储过程)