首先減少的malloc調用,here是我得到了這個想法:通過分割一個大的malloc分配內存
曾經有一個應用程序,我寫了使用大量的內存 小斑點,每個分配與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
- 我必須釋放內存以相同的順序我佔領了。 (在我的情況下不是主要問題,因爲我正在使用遞歸,但如果可能,我想避免它)。
從米哈伊Maruseac啓發:
首先,我創建的int
鏈表,基本上告訴我這記憶指標都是免費的。然後我添加了一個屬性到我的結構叫int memoryIndex
這幫助我返回任何順序佔用的內存。幸運的是,我確定我的內存需求在任何時候都不會超過5 MB,所以我可以安全地分配那麼多內存。解決了。
這可能非常有用。如果您有一定的分配行爲可以利用,它可以節省時間和空間。例如,如果你知道你的內存使用情況是堆棧式的,或者你總是需要相同大小的數據塊。處理它的最好方法取決於這些要求。 –