Stamon 文档站

回到首页
回到上一级

2025/04/23 工作日志

本次更新发行2.4.45。 本次更新修复了一些漏洞,提升了对象管理器的性能。

修复了依赖库的标准C实现中的漏洞

  1. 对于ArrayList.hpp中销毁内存的实现,不应该直接调用析构函数,这会导致不可控的结果。目前我封装了一个destroy_cache方法
  2. 对于strie.h中的ClearTrieDestroyTrie,我整理了代码逻辑,使其可读性更强
  3. 对于ByteMap.hpp中的getValList,我在判断循环条件时忘记加上逻辑非运算符了,这会导致该函数直接返回一个空列表;循环中加入的元素全部都是根节点而不是当前遍历节点。我解决了这些问题

整理了AstRunner的代码逻辑

  1. 对于获取空对象,我不直接调用getNullConst,而是调用MallocObjectMallocObject再返回getNullConst,这让代码整体更统一了
  2. 以往的某些函数可能会在返回时直接返回MallocObject,而不先判断MallocObject是否抛出异常,该问题已被解决
  3. 类对象在被初始化后,会调用PopScope,而对象管理器会误删这个类对象。为此我专门在对象管理器中加入了PopMemberTabScope,来防止类对象被误删

修复并优化了ObjectManager

做了如下优化:

  1. 对于MarkScopeObject的数列扫描和对象扫描部分,我整理并删除了冗余代码。
  2. getNullConst类似的,我设立了“整数复用池”,这是一个存储了从-5到+256的整数对象的数组。在申请整数时,如果整数在从-5到+256的范围内,就会直接返回该数组中的对象。这样一来,当代码频繁申请小整数时,对象管理器不用反复新建对象,而是可以直接返回数组中的元素。此举措减少了内存分配次数,提升了性能。
  3. 为了统一对象申请,我使用了模板特化,并将对象申请的主体部分迁移到了_malloc_object里(不建议直接调用此方法),来特别优化空对象和整数对象的申请。这样申请对象就可以全部统一使用MallocObject

解决了如下问题:

  1. 对于FreeObject,不应该直接删除,而是要用内存池来帮忙删除,并且更新对象占用内存大小的统计变量
  2. 对于~ObjectManager,应该把内存池的剩余空闲内存也清理掉
  3. 在初始化一个新的对象时,要把其gc_flag置为false

修复了一个用词错误

我注意到执行的英文单词是“execute”而不是“excute”,目前所有相关的用词错误已被修复。


查看该文件的提交记录