linux存储程序,Linux程序存储结构

Linux系统下,程序是一个可执行文件,通常是ELF格式。通常,Linux的可执行文件拥有两种内存分配方式:存储时 和 运行时

1、存储时

看实例,下面是对可执行文件aa运行size命令后得到的结果。

[root@xxx1 algriom]# size aa

text      data    bss    dec    hex  filename

1257    500    16  1773    6ed  aa

其中:

text(代码区):表示正文段大小,是CPU执行的机器指令部分,通常,是可共享的,所以即使是频繁执行的程序在存储器中也只需有一个副本;

data(初始化数据区):表示包含静态变量和已经初始化(可执行文件包含了初始化的值)的全局变量的数据段大小;

bss :表示未初始化的全局变量和未初始化的静态变量,称之为未初始化数据段;

PS:第4列和第5列是分别以十进制和十六进制表示的三个段的总长度。

2、运行时(进程结构)

运行时是指一个正在运行的进程在内存空间中的结构,也就是一个进程的结构。

一般包括代码区、初始化数据区、未初始化数据区、堆区和栈区5个部分。

前三者与存储时相同,(1)栈区存储函数参数值、返回值、局部变量等。向下生长

(2)堆区用于动态内存分配。向上生长

堆区和栈区的区别如下:

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

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

结论:

1、 经过初始化的全局变量和静态变量保存在数据段中。

2、 未经初始化的全局变量和静态变量保存在BSS段。

3、 函数内部声明的局部变量保存在堆栈段中。

4、 const修饰的全局变量保存在文本段中,const修饰的局部变量保存在堆栈段中。

5、 字符串常量保存在文本段中。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值