本次更新发行2.4.45。
本次更新修复了一些漏洞,提升了对象管理器的性能。
ArrayList.hpp中销毁内存的实现,不应该直接调用析构函数,这会导致不可控的结果。目前我封装了一个destroy_cache方法strie.h中的ClearTrie和DestroyTrie,我整理了代码逻辑,使其可读性更强ByteMap.hpp中的getValList,我在判断循环条件时忘记加上逻辑非运算符了,这会导致该函数直接返回一个空列表;循环中加入的元素全部都是根节点而不是当前遍历节点。我解决了这些问题getNullConst,而是调用MallocObject,MallocObject再返回getNullConst,这让代码整体更统一了MallocObject,而不先判断MallocObject是否抛出异常,该问题已被解决PopScope,而对象管理器会误删这个类对象。为此我专门在对象管理器中加入了PopMemberTabScope,来防止类对象被误删做了如下优化:
MarkScopeObject的数列扫描和对象扫描部分,我整理并删除了冗余代码。getNullConst类似的,我设立了“整数复用池”,这是一个存储了从-5到+256的整数对象的数组。在申请整数时,如果整数在从-5到+256的范围内,就会直接返回该数组中的对象。这样一来,当代码频繁申请小整数时,对象管理器不用反复新建对象,而是可以直接返回数组中的元素。此举措减少了内存分配次数,提升了性能。_malloc_object里(不建议直接调用此方法),来特别优化空对象和整数对象的申请。这样申请对象就可以全部统一使用MallocObject了解决了如下问题:
FreeObject,不应该直接删除,而是要用内存池来帮忙删除,并且更新对象占用内存大小的统计变量~ObjectManager,应该把内存池的剩余空闲内存也清理掉我注意到执行的英文单词是“execute”而不是“excute”,目前所有相关的用词错误已被修复。