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

相关阅读:
- Linux_C_CommonFunctions_EnvironVariables (kernelcpp, 2006-7-18)
- Linux_C_CommonFunctions_TerminalControl (kernelcpp, 2006-7-18)
- Java_Ajax_GoogleWebToolkit (kernelcpp, 2006-7-19)
- PythonWebFramework_Django_DevelopWeb (kernelcpp, 2006-7-19)
- Linux 策略路由 (cqflsjg, 2006-7-19)
- DSCP、ECN (kuige0803, 2006-7-20)
- UNIX文件模型 (Alexander, 2006-7-21)
- UNIX名字的来历 (Alexander, 2006-7-21)
- IPtables 中文使用指南 (cqflsjg, 2006-7-21)
- Hoare定律 (Alexander, 2006-7-21)
导入论坛
收藏
分享给好友
管理
举报
TAG:
情感绿洲
电脑网络