linux内存布局 zone,linux 内存变量的分布

我们知道,linux通过虚拟内存管理进程的内存(进程的地址空间),而进程的地址空间分布如下 :

450ece52e07bbcc1ba30d92d46f5ac09.png

从进程的空间中可以看出,内存中的变量有的来自可执行elf文件,在elf文件中已经分配好存储空间,有的是在可执行文件运行过程中分配存储空间

区域

描述

变量类型

.text

代码段

程序代码

.rodata

只读数据段

只读变量和字符串常量

.data、.bss

全局数据段

.data存放:已经初始化的全局变量和局部静态变量;

.bss存放:未经初始化的全局变量和局部静态变量;

stack

栈区

局部变量

heap

堆区

malloc空间分配的变量

测试代码

1 #include |" Press , ? for help

2 #include |

3 #include |▼ variables

4 | global_init_var

5 int global_init_var = 0x84; | global_uninit_var

6 int global_uninit_var; | str

7 |

8 char str[] = "acdef"; |▼ functions

9 void func(int i) | func(int i)

10 { | main(void)

11 printf("%d\n",i); |~

12 } |~

13 |~

14 int main(void) |~

15 { |~

16 static int static_var = 0x85; |~

17 static int static_var2; |~

18 int a = 0x03; |~

19 int b; |~

20 func(static_var + static_var2 + a + b); |~

21 return a; |~

22 }

使用  gcc -c test.c (只编译不链接)

使用 objdump  -h test.o   查看目标文件的结构和内容

3f24a5e1d8c041062d9df844ba70f43f.png

使用 objdump  -x -d -s test.o   查看目标文件中各个段和变量分布

16e026c2d43dcc06b2717b70de6f6587.png

标签:变量,int,global,static,内存,linux,var,include

来源: https://www.cnblogs.com/ligao12/p/14317299.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值