局部变量,全局变量,静态局部变量,静态全局变量的区别就是在内存中的存储位置不同
局部变量在栈区
全局变量,静态局部变量,静态全局变量在数据区(包括bss,data,rodata)
在32位linux系统中,一个进程的内存可以按以下分类,windows也类似。
ELF文件头:表示文件的必要信息,开发不重要
————————————————————————————————————
ro和rw区分别为只读区和可读可写区
ro(只读)区包括rodata和text区
- rodata存储常量,例如字符串常量
- text就是代码存储区
rw(可读可写)区包括bss和data区
- 全局初始化数据区/静态数据区(data段)
该区域包括了程序中明确被初始化的全局变量,已经初始化的静态变量(包括全局静态变量和局部静态变量) - 未初始化数据区(bss段)
存入的是全局未初始化变量和未初始化静态变量。未初始化数据区的数据在程序开始执行前被内核初始化为0或者NULL
ro区和rw区均在可执行程序生成时就已经固定,它们的地址不会再改变。它们的生命周期为程序开始到结束
————————————————————————————————————————————
栈区:程序执行时加载的区域,也就是加载局部变量的区域。空间小。
32为系统默认只有!M,32位linux可以扩展到16M,32位windows可以扩展到10M,
堆区:空间大,需要指针进行寻址。
————————————————————————————————————————————
共享库加载区:加载共享库的位置。
————————————————————————————————————————————
我创建了个qq群,里面有各种关于C++的问题与资料,
qq:361863861