您的位置:首页 > 运维架构 > Linux

linux 程序存储结构与进程结构

2012-10-18 21:55 381 查看
linux的可执行文件拥有两种内存分配方式:存储时运行时

1、存储时

存储时是指可执行文件尚未调入内存中运行。这时的存储分为3部分:代码区,数据区和未初始化数据区。

(1) 代码区:顾名思义,代码区即存储CPU可执行的机器代码的区域,值得指出的是指令的立即数是存储在这个区域,并且该区域一般是只读、共享的,因为对于频繁执行的代码只有一份代码并保证代码安全。

(2)数据区:包括全局的已经初始化了的数据、已经初始化了的静态变量(包括全局的静态变量和局部的静态变量)和常量数据(如字符串常量)。

(3)未初始化数据区(BSS,Block Started by Symbol):存入未初始化的全局变量和静态变量。一般由内核进行初始化赋值。

2、运行时

运行时是指在运行的过程中。一般包括代码区、初始化数据区、未初始化数据区、堆区和栈区5个部分。

前三者与存储时相同,栈区存储函数参数值、返回值、局部变量等,堆区用于动态内存分配。

堆区和栈区的区别如下:

(1)栈由操作系统自动管理,无需程序员手工控制,而堆区的申请和释放工作由程序员控制。

(2)栈是一块连续的内存区域,由系统预先设定,一般较小,从高地址向低地址增长;而堆是向高地址扩展的数据结构,是不连续的内存区域,空间较大。另外,分配的效率上,栈的分配比堆的分配要高效很多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: