2010-12-06 87 views
1

我正在使用MS VS 2010,C++,非託管。如果可能,我想分割分配的區域。例如,讓我們說我被分配在內存1KB的空間:split malloc mem space

void* space = malloc(1024); 

後,我決定該塊,作爲單獨的512B和512B空間:

space1 = 512B and space2 = 512B 

最後當我想擺脫這些空間我想單獨釋放他們:

free(space1); 
free(space2); 

這可能沒有重新分配/擴大/縮小內存?

謝謝大家..

回答

1

不,你不能單獨釋放他們,因爲的malloc()將只保留一個必要的簿記數據的副本,因此它只能免費一個大塊。你將不得不編寫你自己的malloc/free包裝。

+0

這很快:)我希望有這個解決方案..好吧,這將等到;我開始寫內存管理器比.. thnx。 – MCA 2010-12-06 15:13:43

+0

@MCA,習慣上接受你喜歡的答案,使用它收到的投票數下方的複選標記。由於DeadMg的答案似乎是您決定滿足您的直接需求的答案,因此您應該接受它。 – 2010-12-06 15:19:06

1

簡而言之:您必須在malloc/new之上編寫自己的內存分配器。

較長版本: 由於內存分配器實現方式不同,因此無法輕鬆修改其內部數據結構,以便跟蹤分配的空閒塊和空閒塊的邊界&。

例如,有一些技術可以爲每個存儲塊添加少量數據。您無法分割這樣的塊,因爲額外的簿記數據會擴大塊的大小。

其他技術將它們的管理數據從塊中放到外部,例如通過位圖,鏈表等。你可能會有更多的運氣。

再一次,你會更好地編寫自己的分配器。

更好的是,如果可能的話,試着尋找替代方法來管理你的記憶。也許池分配器更多的是你需要的東西。