跟我学C++中级篇——栈和堆的形象说明

一、堆和栈

老生再谈,堆和栈。这里其实不用细究堆和栈的内容,我们只形象的解释一下,可能小白们就豁然开朗了。

二、形象的说明

以买菜为例子,一般人买菜是什么样子?大多数情况是去菜市场、超市这种地方去买。其实有人可能会说“我在街边儿摊儿买”,其实是一样的。这种情况其实就可以类比为内存空间的栈。你去买菜,由卖菜人负责菜的供给流程,可能有的菜是菜贩儿自己种的,如街边的小摊贩;有的菜是卖菜人从批发市场或地头儿批发来的。总之,你买的菜不是一手的。是有人替代整理好了,然后你买菜后觉得不好退了回去,也不用你去处理后面的事儿(当然吃了就没得退了,此时可以理解为栈的变量和主程序的生命周期一样长)。而且,买菜就意味着,市场有什么你才能买什么。想吃一种小众的菜或者反季节的菜,可能市场上没有,就买不到。更容易理解的是买菜有一个好处,一手交钱,一手交菜,方便快捷。
栈一般也是如此,它会由底层或基础库支撑,开发者使用时会自动分配,勿需请求方便快捷,而且不用了还可以退回去,不用考虑后果。有库或系统替开发者收拾摊子。
但上面的买菜人说的是大多数人。可对于少数一些人,想吃新鲜的、稀有的或者大量的。甚至有一些食堂或食品加工厂,想要大量的菜,但又不想买第三方的,那么就只有去种菜了。种菜什么特点呢?首先是时间长,可不是今天种明天收,最快的一些绿叶菜也得一周以上才能收获;其次,种菜得有地,不管是买或租,都需要申请批准等一系列的流程;种菜还得有种子、化肥等众多的材料辅助,种完地后还得处理地里的各种问题比如菜根菜叶等等还得深耕啥的。但种菜的优势呢?想吃啥种啥,吃得新鲜,吃新安全,各类菜品也多,想吃多少吃多少。可以组合着吃变着花样的吃。最最主要的是,量大,管饱。一般情况下不会出现菜不管饱甚至无菜可吃的情况。
堆就是这样,你可以分配从几个字节到几G字节的容量,只有你有那么多的内存(种菜的地足够多)。而且你看现在的各种内存管理基本都是按块的大小组合分配内存,这和种菜一块块的根据情况来种植哪种菜一个道理。比如大白菜吃得多用得多,就分配给大块的地。茄子豆角应季的,就分配给中等的地,而那些吃得少如香菜啥的,就少咱一点。而且地块儿可以根据情况随时合并在一起种植更想种的蔬菜。
然后再说说他们的缺点。栈得缺点和买菜一样,买量大了买不到;想自己控制栈的分配被限制(无法决定菜贩卖什么),是被动的应用。而堆的缺点也就来了,想分配空间就得申请,大小,类型啥的都得描述,用完了还得想着回收(想种菜就得收拾地,种子化肥等一大套,菜吃光了还得管菜地的后续的管理)。

三、总结

这种形象的说明可能准确性有些不足,但对于普及一些基础知识,让一些小白有一个较清醒的认知,其实反而更容易达到。不要说普通人,就是一部分开发者,可能终其职业一生,也可能对堆栈也是了解不多。能干好当前的活儿就是最大的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值