堆和栈的区别?
首先对于一个进程的内存空间来说,是有三部分组成的:1.代码区 2.静态数据区 3.动态数据区
动态数据区一般指的就是堆栈
堆栈的区别:
1.堆(heap)是一种链式结构,也就意味着它的地址空间在物理上可以是不连续的
栈(stack)是一种线性结构,那么它的地址空间指的是连续的一块区域。
2.堆(heap)是动态分配内存,C中的malloc/free要自己写代码的时候配合使用,自己去申请和返还内存。
栈(stack)是编译器管理内存,开箱即用(例如定义个局部变量 int b = 1),事后打工仔编译器会帮助你回收内存。
3.堆(heap)是在堆的头部用一个字节去存放堆的大小,方便free的时候知道返还多大的内存,然后存的具体内容因程序员老爷而定。
栈(stack)是在函数调用的时候,首先存进来函数调用语句的下一条可执行语句的地址(因为栈的后入先出的特性,后进来的先执行),然后是函数里面的各个参数。
4.堆(heap)是自己申请释放,速度比较慢。
栈(stack)是编译器自动分配是个快男。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!