linux 程序存储结构与进程结构
2012-10-18 21:55
381 查看
linux的可执行文件拥有两种内存分配方式:存储时 和运行时
1、存储时
存储时是指可执行文件尚未调入内存中运行。这时的存储分为3部分:代码区,数据区和未初始化数据区。
(1) 代码区:顾名思义,代码区即存储CPU可执行的机器代码的区域,值得指出的是指令的立即数是存储在这个区域,并且该区域一般是只读、共享的,因为对于频繁执行的代码只有一份代码并保证代码安全。
(2)数据区:包括全局的已经初始化了的数据、已经初始化了的静态变量(包括全局的静态变量和局部的静态变量)和常量数据(如字符串常量)。
(3)未初始化数据区(BSS,Block Started by Symbol):存入未初始化的全局变量和静态变量。一般由内核进行初始化赋值。
2、运行时
运行时是指在运行的过程中。一般包括代码区、初始化数据区、未初始化数据区、堆区和栈区5个部分。
前三者与存储时相同,栈区存储函数参数值、返回值、局部变量等,堆区用于动态内存分配。
堆区和栈区的区别如下:
(1)栈由操作系统自动管理,无需程序员手工控制,而堆区的申请和释放工作由程序员控制。
(2)栈是一块连续的内存区域,由系统预先设定,一般较小,从高地址向低地址增长;而堆是向高地址扩展的数据结构,是不连续的内存区域,空间较大。另外,分配的效率上,栈的分配比堆的分配要高效很多。
1、存储时
存储时是指可执行文件尚未调入内存中运行。这时的存储分为3部分:代码区,数据区和未初始化数据区。
(1) 代码区:顾名思义,代码区即存储CPU可执行的机器代码的区域,值得指出的是指令的立即数是存储在这个区域,并且该区域一般是只读、共享的,因为对于频繁执行的代码只有一份代码并保证代码安全。
(2)数据区:包括全局的已经初始化了的数据、已经初始化了的静态变量(包括全局的静态变量和局部的静态变量)和常量数据(如字符串常量)。
(3)未初始化数据区(BSS,Block Started by Symbol):存入未初始化的全局变量和静态变量。一般由内核进行初始化赋值。
2、运行时
运行时是指在运行的过程中。一般包括代码区、初始化数据区、未初始化数据区、堆区和栈区5个部分。
前三者与存储时相同,栈区存储函数参数值、返回值、局部变量等,堆区用于动态内存分配。
堆区和栈区的区别如下:
(1)栈由操作系统自动管理,无需程序员手工控制,而堆区的申请和释放工作由程序员控制。
(2)栈是一块连续的内存区域,由系统预先设定,一般较小,从高地址向低地址增长;而堆是向高地址扩展的数据结构,是不连续的内存区域,空间较大。另外,分配的效率上,栈的分配比堆的分配要高效很多。
相关文章推荐
- Linux程序存储结构与进程结构 堆和栈的差别
- Linux程序存储结构与进程结构 堆和栈的区别
- Linux程序存储结构与进程结构
- [转载]Linux程序存储结构与进程结构
- Linux程序存储结构与进程结构堆和栈的区别
- linux中程序存储结构和进程的地址空间
- Linux程序存储结构与进程结构堆和栈的区别【转】
- Linux程序存储结构与进程结构堆和栈的区别
- linux下c程序的存储结构和进程结构
- Linux程序存储结构与进程结构 堆和栈的区别
- .linux进程知识 程序存储、crontab、fork与vfork、exec、_exit()、wait()与waitpid()、孤儿和僵尸 文件读写 文件锁、select、poll
- linux进程存储管理--进程内存结构
- Linux环境编程之进程(二):程序的存储空间布局
- linux进程存储管理--进程内存结构
- linux程序存储结构
- linux进程知识 程序存储、crontab、fork与vfork、exec、_exit()、wait()与waitpid()、孤儿和僵尸
- Linux系统编程_6_进程环境(C程序典型的存储空间)
- linux 程序存储结构
- linux进程知识 程序存储、crontab、fork与vfork、exec、_exit()、wait()与waitpid()、孤儿和僵尸
- linux程序与进程内存结构