千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:西安千锋IT培训  >  技术干货  >  堆和栈的区别?

堆和栈的区别?

来源:千锋教育
发布人:xqq
时间: 2023-10-18 11:51:10

一、什么是堆内存?

堆是在程序运行时申请的内存空间,即动态分配的内存。对堆内存访问和对一般内存的访问没有区别。一般由用户申请和释放,若用户没有释放,程序结束时可能由操作系统回收。

二、什么是栈内存?

栈内存是为线程留出的临时空间,每个线程都有一个固定大小的栈空间,而且栈空间存储的数据只能由当前线程访问,所以它是线程安全的。栈内存由操作系统自动分配和释放,存放函数的形参、局部变量等,其操作方式类似于数据结构中的栈(先进后出)。

三、堆和栈的区别

1、申请过程

栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。

堆:操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时, 会遍历该链表,寻找名列前茅个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的 free 语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放回空闲链表中。

2、申请大小的限制

栈空间容量有限,不同的操作系统有2M、4M、8M。

堆空间因为是不连续的内存,所以空间非常大,取决于虚拟内存的大小。

3、申请的效率

栈空间由系统管理,申请速度很快。

堆空间过程繁琐,使用起来比较慢。

4、存放的数据不同

栈空间存放函数形参和局部变量,并且形参按照从右到左的顺序依次进入栈内存,最后是局部变量。

堆内存的内容由程序员自己决定。

以上就是关于堆和栈堆知识希望对大家有帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

ldo和dcdc的区别?

2023-10-18

需求管理组成部分主要包括哪些?

2023-10-18

什么是敏捷模型有什么优缺点?

2023-10-18

最新文章NEW

大数据、云计算、全链路UI有什么区别?

2023-10-18

fat32和exfat的区别?

2023-10-18

SAS 9.0中,class指令跟by指令有哪些区别?

2023-10-18

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>