【C语言】栈区与堆区
创始人
2025-06-01 22:07:40

目录

  • 分配管理方式
  • 申请大小限制不同
  • 申请效率不同
  • 总结:

栈区、堆区 是内存模型

对比起来看

分配管理方式

  • 栈区由编译器自动管理, 函数运行时分配,函数结束时释放。存放为运行函数而分配的局部变量(函数结束时,其内临时变量在栈区的空间会被后续操作覆盖)、函数参数、返回数据、返回地址等。其操作方式类似于数据结构中的栈。
  • 堆区是动态分配的,分配和释放由程序员通过内存管理基本函数(malloc, calloc, realloc, free)实现,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于链表。

 

申请大小限制不同

  • 栈向低地址扩展,是一块连续的内存区域,(有序的),栈顶的地址和栈的最大容量是系统预先规定好的,能从栈获得的空间较小
  • 堆向高地址扩展,是不连续的内存区域,(无序的),堆的大小受限于计算机系统的有效虚拟内存空间,可供使用的空间较大
    在这里插入图片描述

 

申请效率不同

  • 栈由系统自动分配,速度快,空间利用率高
  • 堆是有程序员自己分配,速度较慢,容易产生碎片,空间利用率较低

对堆来说,频繁执行malloc或free势必会造成内存空间的不连续,形成大量的碎片,使程序效率降低;而对栈而言,则不存在碎片问题。

 
 

总结:

(1)heap是堆,stack是栈;

(2)stack的空间由操作系统自动分配/释放,heap上的空间手动分配/释放;

(3)stack空间有限,heap是很大的自由内存区;

(4)C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。

相关内容

热门资讯

守护最北的日出星辰 转自:成都日报锦观江水深沉 江湾静谧守护最北的日出星辰 游客在漠河“神州北极”碑前打卡拍照,碑...
万华化学福建码头公司增资至10... 经济观察网 天眼查App显示,12月16日,万华化学(福建)码头有限公司发生工商变更,注册资本由4亿...
文旅“融”光焕发 共绘“诗与... ●兵团日报全媒体记者 姜蒙 通讯员 张培丽 胥强 仲冬时节,寒意渐浓,五师八十三团十连...
情暖援疆路 医心护健康 ●蔡伟 “医生,我的胃老是不舒服,吃了东西总不消化。”12月16日,在四师总医院可克达拉市院区...
以行践诺 服务暖心 ………… “我们将以更大力度推动‘万企兴万村’行动走深走实,团结引领兵团广大民营企业发挥优势,...