程序运行的一生

2015/03/3120:56:17 发表评论

当我们执行一个程序时,程序体有序的排列在内存里。首先,操作系统在内存中为程序运行创建地址空间,地址空间包含实际的程序指令和需要的数据。

操作系统在创建地址空间后,把程序的可执行文件加载到新创建的地址空间里,程序(可执行文件)一般包含三种类型的段:.text .bss 和.data。.text段在内存中被映射为只读,.data和.bss被映射为可写。全局变量一般保存在.bss和.data段里。.data段包含静态初始化的数据,.bss段包含未初始化的数据,.text段包含程序指令。

加载完程序后,系统紧接着就开始为程序初始化“栈”和“堆”。栈是一种“后进先出”的数据结构,即最后入栈的数据将第一个从栈顶移走。栈比较适合保存暂时性的信息,即不需要长期保存的信息。栈用于保存局部变量、函数调用信息以及其它调用函数后系统通常会清除的信息。

栈的另外一个重要牲是它的地址空间“向下减少”,也就是说,栈上保存的数据越多,地址值就越小。

堆是另外一种保存程序信息的数据结构,更准确的说法是,它保存程序的动态变量。堆是“先进先出”的数据结构,允许在“堆”的一端插入数据,从另一端移走数据。堆的地址空间是“向上增长”的,即堆上保存的数据越多,堆地址的值就越大,这一点和栈正好相反。

  • 微信扫码赞助
  • weinxin
  • 支付宝赞助
  • weinxin

发表评论

您必须才能发表评论!