堆和栈的区别?
首先对于一个进程的内存空间来说,是有三部分组成的:1.代码区 2.静态数据区 3.动态数据区
动态数据区一般指的就是堆栈
堆栈的区别:
1.堆(heap)是一种链式结构,也就意味着它的地址空间在物理上可以是不连续的
栈(stack)是一种线性结构,那么它的地址空间指的是连续的一块区域。
2.堆(heap)是动态分配内存,C中的malloc/free要自己写代码的时候配合使用,自己去申请和返还内存。
栈(stack)是编译器管理内存,开箱即用(例如定义个局部变量 int b = 1),事后打工仔编译器会帮助你回收内存。
3.堆(heap)是在堆的头部用一个字节去存放堆的大小,方便free的时候知道返还多大的内存,然后存的具体内容因程序员老爷而定。
栈(stack)是在函数调用的时候,首先存进来函数调用语句的下一条可执行语句的地址(因为栈的后入先出的特性,后进来的先执行),然后是函数里面的各个参数。
4.堆(heap)是自己申请释放,速度比较慢。
栈(stack)是编译器自动分配是个快男。