linux/Unix进程地址分配

上一篇 / 下一篇  2006-07-22 02:56:54 / 天气: 晴朗 / 心情: 高兴 / 个人分类:UNIX/Linux

程序在运行前需要被装载进内存中,分配给进程的内存可以划分为5个区域。


文本段(text segment

这里存放程序的代码。相同程序的多个进程将共用一个代码段,这部分内存只对运行它的进程可见而且是只读的。程序文件中包含执行代码的段落叫“文本节”(text section,程序第一次运行时内核将执行文件的文本节装入文本段。


数据段(data segment

这部分来自执行文件的“数据节”(data section),所有在程序中初始化过的全局变量和静态变量的值都储存在这里。


BSS

BSS数据存来自执行文件的BSS节,这里储存没有初始化(或者初始化为零)的数据。通常执行文件的BSS节并不“真的”保存这些数据的值。进程运行时,BSS被放进数据段的高地址区。

*BSS是“Block Started by Symbol”的缩写,这最早是IBM7094汇编程序里的一个代号。


以上三部分在可执行文件内的大小可以通过size命令查看,例如:


$ size cat

text data bss dec hex filename

14782 452 328 15562 3cca cat



堆栈段(stack segment)包括两部分:


堆(heap

提供动态内存(通过malloc申请的)。堆在BSS区域的上方,随着程序不断申请内存,堆会向上增长,ps命令显示的进程占用内存的大小也会随之变化。


栈(stack

也就是维护函数调用的系统栈,函数的参数和本地变量(除去静态变量)储存在这里。栈位于进程内存空间的最高段,并随着函数的调用向下增长。函数回调时,栈向上收回,其中的参数和变量数据作废。




TAG: 情感绿洲 电脑网络

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-08  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 9739
  • 日志数: 11
  • 建立时间: 2006-07-17
  • 更新时间: 2006-09-13

RSS订阅

Open Toolbar