编码世界有三类存储空间
- 堆
- 栈
- 静态存储区(也称为全局数据区)
堆,栈也称为动态存储区
静态存储区数据一般是在编译期间为数据对象分配存储空间
栈数据一般是在运行期间为数据对象分配存储空间,他的释放由编译器负责
堆数据由程序员手动分配和手动释放
1. new(malloc)申请的数据存储在
堆
中2. 局部变量和函数参数储存在
栈
中3. 全局变量;静态变量(
static
全局或局部静态变量)存储在静态存储区
,字符串常量也是存储在静态存储区的
注:
- 堆中的数据需要用完后手动释放,这很重要,严重会造成内存泄漏
- 栈中对象会随着定义所在区间的结束自动释放
- 静态存储区:程序运行期间会一直存在,不会释放
ps补充
字符常量和字符数组
字符常量 : char *p = "hello"
,带双引号,保存在静态存储区中
字符数组 : char c[] = "hello"
,是一个局部变量,保存在栈中