C++中内存主要分为5个存储区:
1.栈:
局部变量,函数参数等存储在该区,由编译器自动分配和释放;栈属于计算机系统的数据结构,进栈出栈有相应的计算机指令支持,而且分配专门的寄存器存储栈的地址,效率高,内存空间地址连续,栈的内存空间有限。
2.堆:
需要程序员自己申请和释放(new,delete),属于动态分配内存,内存空间几乎没有限制,l内存空间不连续,因此会产生内存碎片;操作系统有一个记录空间内存的链表,收到内存申请时,遍历链表,找到第一个空间大于申请空间的堆节点,将该节点分配给程序,并将该节点从链表中删除。一般系统会在该内存空间的首地址处记录本次分配的内存大小,用于delete释放该内存空间。
3.全局静态存储区:
全局变量,静态变量分配到该区,程序结束时自动释放,包括DATA段(全局初始化区)和BSS段(全局未初始化区)。其中,初始化的全局变量和静态变量放在Data段,未初始化的全局变量和静态变量存放在BSS段。BSS段特点是:程序执行前BSS段自动清零,所以未初始化的全局变量和静态变量在程序执行前已经成为0。
4.文字常量区:
存放常量,而且不允许修改,程序结束后由系统释放。
5.程序代码区:
存放程序二进制代码