从可执行程序加载到main函数执行之前

  • 可执行程序被加载到内存后在内存中的分段存储
  1. 分段存储的原因

程序在运行过程中,指令是依次执行的,只需要执行一次(跳转、递归的操作会执行多次),而数据一般是需要多次访问的,因此分段存储便于访问。

     2. 在内存中的具体分段名称

代码段:又称文本段(text segment),存放程序执行指令的内存区域。特点:只 读,大小在编译器编译链接时自动计算得到,属于静态内存分配。

数据段:data segment,存放已初始化的全局变量和静态变量,属于静态内存分配。

BSS段:BSS segment,BSS全名是Block Started by Symbol(以符号开始的块),存 放未初始化的全局变量和静态变量,特点:可读写,在程序执行之前BSS 段会自动清零,所以未初始化的全局变量和静态变量在程序执行前就已经 是0了,属于静态内存分配。

堆(Heap):存放程序运行过程中被动态分配的内存区域,特点:大小不固定, 可动态扩张或缩减,在内存中位于BSS段和栈之间,属于动态内存分 配。

栈(Stack):存放程序中的局部变量、参数及返回值,属于静态内存分配。

  • main函数执行前发生的事情

程序被加载到了内存中之后要去执行,先从main函数开始,但是在进入main函数之前是需要做一些工作的,包括以下的几个方面:

  1. 设置栈指针。
  2. 初始化全局变量和静态变量。
  3. 将未初始化的全局变量和静态变量赋初值,数值型short,int,long等为0,bool为FALSE,指针为NULL,等等。
  4. 全局对象初始化,在main函数之前调用构造函数。
  5. 将argc、argv传递给main函数,然后开始执行main函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值