# 2025/04/23 工作日志

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

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

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

### 整理了AstRunner的代码逻辑

1. 对于获取空对象，我不直接调用``getNullConst``，而是调用``MallocObject``，``MallocObject``再返回``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”，目前所有相关的用词错误已被修复。