假设我有一个程序(例如 C++),它分配多个对象,永远不会大于给定的大小(我们称之为 MAX_OBJECT_SIZE)。
我在堆上也有一个区域(我将其称为“页面”)(分配给例如 malloc(REGION_SIZE),其中 REGION_SIZE >= MAX_OBJECT_SIZE)。
我一直在该页面中保留空间,直到填充的空间等于 PAGE_SIZE(或至少获得 > PAGE_SIZE - MAX_OBJECT_SIZE)。
现在,我想分配更多内存。显然我以前的“页面”还不够。所以我至少有两个选择:
- 使用 realloc(page, NEW_SIZE),其中 NEW_SIZE > PAGE_SIZE;
- 分配一个新的“页面”(page2)并将新对象放在那里。
如果我想有一个自定义分配功能,那么:
- 使用第一种方法,我会看到我填充了多少,然后将我的新对象放在那里(并将对象的大小添加到我填充的内存变量中)。
- 使用第二种方法,我会有一个页面列表(向量?数组?),然后查找当前页面,然后在所选页面上使用类似于 1 的方法。
最终,我也需要一种释放内存的方法,但我可以弄清楚那部分。
所以我的问题是:解决此类问题的最有效方法是什么?是选项 1、选项 2 还是我在这里没有考虑过的其他选项?是否需要/足以为现实情况得出结论? 我了解不同的操作可能会执行不同的操作,但我正在寻找一个整体指标。