堆区:
- 动态内存分配
- malloc/free
- realloc
- calloc
栈区
- 局部变量
- 函数的形式参数
- 函数调用也开辟空间
**
两者区别
**
1. 申请方式不同:
栈的空间由系统自动分配/释放;
堆上的空间需要程序员自己申请,并指明大小,并由程序员进行释放。
2. 申请大小不同:
栈获得的空间较小,在Windows下,栈是向低地址扩展的数据结构;
堆获得的空间较大,堆是向高地址扩展的数据结构。
3. 申请效率不同:
栈是由系统自动分配,速度较快,但是程序员是无法控制的;
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。
4. 存储内容不同:
栈在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然后函数的各个参数进栈,其中静态变量是不入栈的。
堆一般是在头部用一个字节存放堆的大小,堆中的具体内容是人为安排;
5. 底层不同:
栈是连续的空间;
堆是不连续的空间。