首先,这是我得到这个想法的地方:
我曾经写过一个应用程序,它使用了大量的小内存块,每个内存块都用 malloc() 分配。它工作正常,但速度很慢。我只用一个替换了对 malloc 的许多调用,然后在我的应用程序中分割了那个大块。它要快得多。
我正在分析我的应用程序,当我减少 malloc 调用的数量时,我得到了意想不到的良好性能提升。不过,我仍在分配相同数量的内存。
所以,我想做这个人所做的事情,但我不确定最好的方法是什么。
我的想法:
// static global variables
static void * memoryForStruct1 = malloc(sizeof(Struct1) * 10000);
int struct1Index = 0;
...
// somewhere, I need memory, fast:
Struct1* data = memoryForStruct1[struct1Index++];
...
// done with data:
--struct1Index;
陷阱:
- 我必须确保我不超过10000
- 我必须按照我占用的顺序释放内存。(在我的情况下不是主要问题,因为我使用的是递归,但如果可能的话我想避免它)。
灵感来自 Mihai Maruseac:
首先,我创建了一个链表,int
它基本上告诉我哪些内存索引是空闲的。然后我在我的结构中添加了一个名为的属性,int memoryIndex
它可以帮助我以任何顺序返回占用的内存。幸运的是,我确信我的内存需求在任何时候都不会超过 5 MB,因此我可以安全地分配这么多内存。解决了。