我们知道,linux通过虚拟内存管理进程的内存(进程的地址空间),而进程的地址空间分布如下 :
从进程的空间中可以看出,内存中的变量有的来自可执行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 查看目标文件的结构和内容
使用 objdump -x -d -s test.o 查看目标文件中各个段和变量分布
标签:变量,int,global,static,内存,linux,var,include
来源: https://www.cnblogs.com/ligao12/p/14317299.html