1.未初始化的全局变量(bss段)
bss段是用来存放那些没有初始化的和初始化为0的全局变量。(全局变量在整个程序的运行周期内,bss数据一直存在。bss类型的全局变量只占运行时的内存空间,而不占用文件空间)
如:
由于data_array是未初始化的全局变量,存放在bss段,所以该文件的大小不超过4M。
2.初始化过的全局变量(data段)
data段用来存放那些初始化为非零的全局变量。(data类型的全局变量即占用文件空间,又占用运行时内存空间。)
上面的代码中的全局变量已被初始化为非零值,文件就变成4M多了。
上面的代码由于全局变量被初始化为0,因编译器优化的原因,被存放在bss段。
3.常量数据(rodata段)
用来存放常量数据。
对于字符串常量,编译器会自动去掉重复的字符串,保证一个字符串在一个可执行文件中只存在一份拷贝。
rodata是多个进程间共享的,提高空间的利用率。
4.代码段(text段)
这个段是可以执行的,用来存放代码。
5.栈(stack)
用来存放临时变量和函数参数。
6.堆(heap)
堆的生命周期完全由使用者控制。