三种内存管理方式:
1、栈
2、堆
3、数据管理区(包括代码段、数据段(.data)、bss段)
不同内存管理方式使用区别:
栈:只有一个出口呈现出先进后出方式。使用时是自动的,完全有编译器和运行环境提供服务,不用人为干预。
堆:在使用的时候需要人工申请人工释放。
存储数据不同:
栈:普通局部变量、函数内部临时使用的,但是出了函数不会用到的变量。
数据区:
代码段:程序中可执行的部分(函数)、常量、const型常量。
数据段:全局变量(显示初始化为非零)、静态局部变量(static修饰)。
bss段:全局变量(显示初始化为零或为显示初始化(在C语言中默认把未显示初始化的变量设为零))。
堆:堆内存与数据段属性几乎完全相同,只是生命周期不一样,堆内存开始于malloc(或其他内存申请函数),结束于free(或delete)但是数据段全局变量伴随整个程序。
四种不同的栈:
满栈:
进栈:先移动指针再存数据。 出栈:先出数据在移动指针。
空栈:XXXXX
减栈:
进栈:指针向下移动。 出栈:指针向上移动。
增栈:XXXXX
eg:满减栈
进栈:先指针向下移动再存入数据。 出栈:先数据弹出再指针向上移动。
注:
全局变量才算是程序的数据,局部变量只能算是函数的数据。