34|内存管理第1关:Arena技术和元数据
宫文学
你好,我是宫文学。
通过前面 8 节课的学习,我们实现了对浮点数、字符串、数组、自定义对象类型和函数类型的支持,涵盖了 TypeScript 的一些关键数据类型,也了解了实现这些语言特性所需要的一些关键技术。
在这些数据类型中,字符串、数组、class 实例,还有闭包,都需要从堆中申请内存,但我们目前还没有实现内存回收机制。所以,如果用我们现在的版本,长时间运行某些需要在堆中申请内存的程序,可能很快会就把内存耗光。
所以,接下来的两节课,我们就来补上这个缺陷,实现一个简单的内存管理模块,支持内存的申请、内存垃圾的识别和回收功能。在这个过程中,你会对内存管理的原理产生更加清晰的认识,并且能够自己动手实现基本的内存管理功能。
那么,首先我们要分析一下内存管理涉及的技术点,以此来确定我们自己的技术方案。
内存管理中的技术点
计算机语言中的内存管理模块,能够对内存从申请到回收进行全生命周期的管理。
内存的申请方面,一般不会为每个对象从操作系统申请内存资源,而是要提供自己的内存分配机制。
而垃圾回收技术则是内存管理中的难点。垃圾回收有很多个技术方案,包括标记 - 清除、标记 - 整理、停止 - 拷贝和自动引用计数这些基础的算法。在产品级的实现里,这些算法又被进一步复杂化。比如,你可以针对老的内存对象和新内存对象,使用不同的回收算法,从而形成分代管理的方案。又比如,为了充分减少由于垃圾收集所导致的程序停顿,发展出来了增量式回收和并行回收的技术。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了内存管理的关键技术和实现方法,涉及垃圾回收算法、内存申请释放、元数据管理等重要内容。首先介绍了垃圾回收的标记-清除算法原理和实现方式,以及内存的申请和释放中的Arena技术。其次,强调了遍历栈帧和内存对象的重要性,以及保存函数、类和闭包等元数据信息的必要性。文章还详细讨论了如何管理元数据,包括变量布局信息、类的元数据、数组对象和闭包的处理方式。最后,总结了垃圾收集算法、内存分配功能和元数据信息的重要性,以及它们在程序调试和未来元编程功能中的作用。整体而言,本文对内存管理的关键技术和实现方法进行了深入浅出的介绍,对读者理解内存管理原理和实践具有一定的指导意义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- 有学识的兔子.asciz 代表以"\0"作为结束符的字符串; .p2align代表数据边界需要满足对齐的字节倍数;.quad:代表大数,8字节的整数; 要数据区写4个字节整数,是不是类似如下,声明数据段然后填入数据? .section __DATA,__const .globl _foo.meta ## can be accessed globally .p2align 2 ## 4 byte alignment _foo.meta: .word _val ##4字节整数2021-11-072
- 奋斗的蜗牛.asciz用来声明字符串,.p2align用来声明下一条指令所在位置的对齐要求,.quad声明8字节的数2021-11-021
- ...是否选择使用C语言编写才需要考虑内存管理 使用JS编译的话内存管理会由JS完成2021-11-021
- 奋斗的蜗牛这节课知识量很大,看来汇编语言还是很重要2021-11-011
- ifelse学习打卡2022-09-29归属地:浙江
收起评论