对于每一个程序经过编译连接生成可执行文件的过程中操作系统会为每一个程序分配一个虚拟地址空间,其大小和操作系统的位数有关(32位操作系统为4G)。这4G的空间被分为3G用户空间和1G内核空间,其中内核空间是共享的,用户空间时独立的,用户空间又有如下分布:
- 保留区:不可访问
- text段:存放程序编写后的指令
- data段:存放初始化了的且初始值不为零的全局变量
- bss段:存放未初始化或初始化为零的全局变量
- 保留堆区:这部分空间只有在遇到malloc或new指令时才被定义为堆区,并且可用于加载程序加载需要的共享库。
- stack区:函数运行时的局部变量存储区
- 下面就是主函数的命名行参数和环境变量存放区。
//main.c
int gdata1 = 10;
int gdata2 = 0;
int gdata3;
static int<