堆和栈的区别?

首先对于一个进程的内存空间来说,是有三部分组成的:1.代码区 2.静态数据区 3.动态数据区

动态数据区一般指的就是堆栈

堆栈的区别:

1.堆(heap)是一种链式结构,也就意味着它的地址空间在物理上可以是不连续的

   栈(stack)是一种线性结构,那么它的地址空间指的是连续的一块区域。

2.堆(heap)是动态分配内存,C中的malloc/free要自己写代码的时候配合使用,自己去申请和返还内存。

 栈(stack)是编译器管理内存,开箱即用(例如定义个局部变量 int b = 1),事后打工仔编译器会帮助你回收内存。

3.堆(heap)是在堆的头部用一个字节去存放堆的大小,方便free的时候知道返还多大的内存,然后存的具体内容因程序员老爷而定。

   栈(stack)是在函数调用的时候,首先存进来函数调用语句的下一条可执行语句的地址(因为栈的后入先出的特性,后进来的先执行),然后是函数里面的各个参数。

4.堆(heap)是自己申请释放,速度比较慢。

   栈(stack)是编译器自动分配是个快男。

 

posted @ 2022-03-04 16:34  QZ-CMD  阅读(340)  评论(0编辑  收藏  举报