2012-07-24 36 views
4

假設我在堆中有一些數組並不重要,這些數組由mallocnew構成。我需要最有效的方法來擴大它。我的意思是,如果它有足夠的可用空間,在已分配數據之後可以保持我的數據不變。是否有可能在C++中維護?內存重新分配 - 保留我的數據

請問realloc以這種方式工作嗎?

+2

是的,至少在大多數實現中,'realloc'會嘗試放大當前的分配,而不是分配一個新的內存塊並複製給它。 'new'對此沒有任何模擬(即,甚至沒有辦法要求它擴大分配)。 – 2012-07-24 16:07:21

回答

3

是的,realloc是你在找什麼。請注意,它不適用於new,您將不得不使用malloc(或者說,calloc)。另外,有時候擴展內存是不可能的,因此realloc會嘗試爲你做,但如果不行的話 - 它會採用分配新內存,將內容複製到新的地方並釋放舊內存。

+0

你對我的問題的回答比我定義的更好 – triclosan 2012-07-24 18:51:23

+0

現在的C++風格的內存管理不能提供所需的功能,這很奇怪,可惜。 – triclosan 2012-07-24 20:07:03

+0

@triclosan:如果你深入到物理和虛擬內存的細節,你會明白爲什麼這有時是不可能的。它與C++無關 - 它是硬件的工作原理。你不能跳過你的頭,就這些。 – 2012-07-24 20:09:03

1

是的,realloc就是這樣工作的,儘管鏈接表示它不能保證,但我認爲這適用於內存碎片化並且沒有足夠空間來擴展內存塊的情況。