本次更新发行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”,目前所有相关的用词错误已被修复。