2010-06-13 121 views
1

重新分配內存的權利和最佳方式是什麼? 例如我分配100個字節,WinAPI的函數HeapAlloc 然後我填100個字節,一些數據存儲的,現在我想在年底以前增加更多新的數據...內存重新分配

我應該怎麼辦? 用更多的字節做一個新的分配,然後將舊的+新的複製到新的位置並釋放舊的內存? 或者有一些方法可以在舊數據末尾分配新內存,然後僅複製新數據?

+0

無論如何realloc-ating不是一個免費開銷的動作,所以你應該限制所需的realloc的數量......如果你知道你必須在100字節後添加N個字節,在開始時分配N + 100,避免重新分配;如果您知道每個「數據」可能需要額外的N個內存,請分配100 + N * m,其中根據您的需要選擇m,以在同一時間限制realloc和內存額外使用的可能數量。 – ShinTakezou 2010-06-13 13:14:21

回答

2

您應該使用HeapReAlloc,因爲如果只是在不復制數據的情況下擴展內存,Windows無疑具有優化位置。例如,我見過realloc(C標準版)的實現,它檢查當前塊是否可以吸收跟隨它的空閒塊。如果是這樣,它就是爲了避免複製操作。如果沒有,它將分配新的內存並在釋放舊內容之前進行復制。

這樣做的另一個優點是可以最大限度地減少所需的額外內存。在複製版本中,您必須在某個時間點存在兩份當前數據的副本。

+0

謝謝,現在我要試試它:) – davispuh 2010-06-13 14:06:00