假設我在堆中有一些數組並不重要,這些數組由malloc
或new
構成。我需要最有效的方法來擴大它。我的意思是,如果它有足夠的可用空間,在已分配數據之後可以保持我的數據不變。是否有可能在C++中維護?內存重新分配 - 保留我的數據
請問realloc
以這種方式工作嗎?
假設我在堆中有一些數組並不重要,這些數組由malloc
或new
構成。我需要最有效的方法來擴大它。我的意思是,如果它有足夠的可用空間,在已分配數據之後可以保持我的數據不變。是否有可能在C++中維護?內存重新分配 - 保留我的數據
請問realloc
以這種方式工作嗎?
是的,realloc
是你在找什麼。請注意,它不適用於new
,您將不得不使用malloc
(或者說,calloc
)。另外,有時候擴展內存是不可能的,因此realloc
會嘗試爲你做,但如果不行的話 - 它會採用分配新內存,將內容複製到新的地方並釋放舊內存。
是的,realloc就是這樣工作的,儘管鏈接表示它不能保證,但我認爲這適用於內存碎片化並且沒有足夠空間來擴展內存塊的情況。
是的,至少在大多數實現中,'realloc'會嘗試放大當前的分配,而不是分配一個新的內存塊並複製給它。 'new'對此沒有任何模擬(即,甚至沒有辦法要求它擴大分配)。 – 2012-07-24 16:07:21