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

本文深入探讨了Linux可执行文件的内存分配机制,详细解释了存储时和运行时的内存区域划分,包括代码区、数据区、未初始化数据区、栈区和堆区的功能与区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     linux的可执行文件拥有两种内存分配方式:存储时运行时

     1、存储时

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

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

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

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

 

     2、运行时

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

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

       堆区和栈区的区别如下:

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

      (2)栈是一块连续的内存区域,由系统预先设定,一般较小,从高地址向低地址增长;而堆是向高地址扩展的数据结构,是不连续的内存区域,空间较大。另外,分配的效率上,栈的分配比堆的分配要高效很多。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值