linux 内存变量的分布
2024-09-06 19:08:20
我们知道,linux通过虚拟内存管理进程的内存(进程的地址空间),而进程的地址空间分布如下 :
从进程的空间中可以看出,内存中的变量有的来自可执行elf文件,在elf文件中已经分配好存储空间,有的是在可执行文件运行过程中分配存储空间
区域 | 描述 | 变量类型 |
.text | 代码段 | 程序代码 |
.rodata | 只读数据段 | 只读变量和字符串常量 |
.data、.bss | 全局数据段 |
.data存放:已经初始化的全局变量和局部静态变量; .bss存放:未经初始化的全局变量和局部静态变量; |
stack | 栈区 | 局部变量 |
heap | 堆区 | malloc空间分配的变量 |
测试代码
1 #include <stdio.h> |" Press <F1>, ? for help
2 #include <strings.h> |
3 #include <stdlib.h> |▼ 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 查看目标文件的结构和内容
使用 objdump -x -d -s test.o 查看目标文件中各个段和变量分布
最新文章
- MXNET安装过程中遇到libinfo导入不了的问题解决
- 你真的知道setTimeout是如何运行的吗
- yii2.0自动登录功能的实现方法
- WPF DataGrid 操作列 类似 LinkButton
- Genymotion开启就全部白屏解决方法
- UVa 10382 - Watering Grass
- php中memcache的运用
- java基础之类与对象
- 开发资源库(repositiory)
- Angular2+ 使用 Protractor 与 Modify Header Value (HTTP Headers) 插件 完成 Windows Authorization 验证
- Codeforces 160D Edges in MST tarjan找桥
- iOS笔记之UIKit_UISlider/UIStepper/UISwitch
- 2018 Multi-University Training Contest 5 Solution
- Jquery 批量操作标签属性
- (42)JS运动之多物体框架--多个div变宽
- 计算hashCode通用计算公式
- String中的方法
- Ubuntu 16.04 安装opencv的各种方法(含opencv contrib扩展包安装方法)
- poj2482--Stars in Your Window(扫描线)
- 阿里云虚拟主机针对恶意频繁攻击式访问造成CPU爆满的解决方法