首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

程序的执行顺序有关问题

2012-11-03 
程序的执行顺序问题。请教高手以下问题:“程序的执行是由main()函数开始。”这句话具体是神意思?这和“全局变量

程序的执行顺序问题。
请教高手以下问题:
“程序的执行是由main()函数开始。”这句话具体是神意思?这和“全局变量在程序的全部执行过程中都占内存空间”相矛盾吗?如果不矛盾的话,那么main()函数的执行与全局变量的空间分配是谁先谁后呢?如果是先给全局变量分配空间,那么为什么还说程序的执行是由main()函数开始?

[解决办法]
一般在main函数之前会有一段crt的代码,使用汇编语言实现的。它会先初始化一些内存段,包括全局变量,然后配置堆栈地址,最后再跳到main函数,这样完成了从汇编代码到C代码的切换。“程序的执行是由main()函数开始。”这句话其实指的是C代码从main函数开始执行。
[解决办法]

探讨

一般在main函数之前会有一段crt的代码,使用汇编语言实现的。它会先初始化一些内存段,包括全局变量,然后配置堆栈地址,最后再跳到main函数,这样完成了从汇编代码到C代码的切换。“程序的执行是由main()函数开始。”这句话其实指的是C代码从main函数开始执行。

[解决办法]
有兴趣可以看下crtexe.c中的mainStartup函数的实现
[解决办法]
其实main函数 也是函数,与其他普通函数没有区别,唯一的区别就是,它是c的入口函数,既然是函数,那么肯定是让其他代码来调用的,谁来调用,汇编启动代码,也就是说在c程序运行之前,肯定要有一段引导代码,或者叫启动代码,而这段启动代码在调用一个叫main的函数(其实也就是main函数)之前需要做一些工作:
初始化堆栈(函数调用中必须用的,因为他会保存函数之间传递的参数),初始化内存等等用到的初始化工作,至于全局变量,在调用main之前早就拷贝到内存中了。

热点排行