linux 内存变量的分布
我们知道,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 查看目标文件中各个段和变量分布


浙公网安备 33010602011771号