奇怪的内存分配行为

逆向工程 记忆 静态分析
2021-07-07 03:08:19

我目前正在为特定游戏开发一个模组库,我遇到了菜单系统的一部分,我无法弄清楚它的用途。

有问题的表达是这样的:

unsigned num = ((n + 1) * 4) / 3 + 3;

然后游戏继续使用该值为菜单项结构分配空间:

void *newItemStorage = allocate(num * 0x18);

// 0x18 = sizeof(menu item structure)

n是当前菜单项结构的数量,包含此数学运算的代码用于在当前不够时为更多结构分配空间(使用 将旧数组复制到新空间中memcpy)。

据我所知,这个系统必须分配比它需要的更多的空间,以便将来需要发生的重新分配更少。但是,我不明白为什么必须使用这个特定的公式来计算空间。游戏存储num仅在 时重新分配num < n + 1

我实际上是在计算公式时绘制了它的图形,所以这是该图形(我曾经floor尝试模拟整数除法。)我发现最令人困惑的部分num之一是三人一组的事实

n = 01开始并增加 1 收益率: 4, 5, 7, 8, 9, 11, 12, 13.

如果这一些预分配内存的系统,为什么要这样做?如果不是,系统在做什么?

0个回答
没有发现任何回复~