前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么现在的内存分配方式可以支持递归?

为什么现在的内存分配方式可以支持递归?

作者头像
城市中的游牧民族
修改2019-04-22 00:26:08
1.2K0
修改2019-04-22 00:26:08
举报
文章被收录于专栏:前端真相前端真相

版权声明:可转载,需要明确注明转载出处和链接;不允许商业用途。 https://cloud.tencent.com/developer/article/1414713

阶段一、静态内存分配(Static allocation)

程序员编程需要预计变量大小,指定特定内存大小给变量,无法通过代码动态给变量分配内存。程序中声明的变量在编译期间就已经被绑定到目标内存。

优点:程序鲁棒性(健壮性)高,毕竟内存分配都在掌控中。

缺点:只能使用数组这种确定内存占用大小的数据结构,不能使用链表等动态数据结构。不能够使用递归,每次重新调用相同函数都会覆盖之前的数据。

阶段二、栈内存分配(Stack Allocation)

内存被划分成不同的内存帧。每次使用根据栈的先进先出特性,被调用函数的占用内存要先被释放掉。

优点:可以使用递归了。每次调用相同函数可以根据不同入参的不同而创建不同栈帧。

缺点:程序鲁棒性(健壮性)相对较差一点。使用递归也可能会导致栈溢出。需要保持数据的有序性,无法使用链表等动态数据结构。

阶段三、堆内存分配(Heap Allocation)

变量保存在可变大小的内存区域中,即堆。数据也不被要求连续存放在内存中。

优点:可以使用链表、图等动态数据结构了。

缺点:程序鲁棒性(健壮性)更差一点,程序运行时的不可控性加大。堆内存分配本身也消耗性能。程序员的编码难度加大,要小心翼翼管理已分配的内存,比如C++使用malloc函数分配内存,用free函数释放malloc已分配的内存。如果没有回收好的话,会造成极大的浪费,毕竟内存也是稀缺的。

阶段四、垃圾回收(Garbage Collection)

随着编程语言的不断发展,出现了以Java会代表的支持自动垃圾回收内存的编程语言,降低了程序员的编码难度。

优点:提高了编码效率的同时也兼顾了程序的鲁棒性。

缺点:当然GC本身也很消耗系统资源,降低系统运行效率,在实时性要求较高的应用场景和系统级编程不那么实用,而在web开发中需要频繁申请和释放内存,使用GC可以提高开发效率,这比系统延时更重要,提高系统性能可以通过其它渠道进行。

微信公众号:技术很有趣

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 阶段一、静态内存分配(Static allocation)
  • 阶段二、栈内存分配(Stack Allocation)
  • 阶段三、堆内存分配(Heap Allocation)
  • 阶段四、垃圾回收(Garbage Collection)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档