stl中有個很重要的東西就是vector,開發中會經常用到,至少我是經常使用,vector的存在可以使開發者不必關心記憶體的申請和釋放。但是,vector的乙個缺點就是它的記憶體分配是按照2的倍數分配記憶體的。當當前容量對插入元素不夠時,分配一塊新的記憶體,這塊記憶體的容量是原vector容量的2倍大小,然後複製舊記憶體,釋放舊記憶體,可能多次涉及拷貝建構函式和析構函式,如果乙個程式需要的記憶體超過2g的話,那麼就會出現bad_alloc錯誤,從而引發程式的崩潰,而這也正是vector的劣勢所在。
以前看到這一點時,覺得程式不可能會需要那麼大的記憶體,這種情況不可能會發生在我的程式的身上,所以我並不在乎vector的這個缺點。但是,昨天測試程式時,卻發生了這種情況,程式要申請大量的記憶體,我看著程式的記憶體分配,在程式占用的記憶體超過1.9g時,就會發生bad_alloc的錯誤。目前,尚未想到好的解決方案,只能是採用分而治之的思想,將原問題分成n個子問題分別求解,最後再合併了。
#include
#include
#include
using
namespace
std;
class a
結果為:
constrctor is used
constrctor is used
a constrctor is used
a constrctor is used
a constrctor is used
destructor is used
destructor is used
destructor is used
destructor is used
destructor is used
開始記憶體大小為0,然後插入a,記憶體擴大到1,呼叫拷貝建構函式,然後在插入,記憶體就會擴大,就會呼叫拷貝建構函式,將a和b都拷貝到新的記憶體空間中然後把a原來的空間析構掉。
vector 的記憶體分配問題
vector 有乙個機制是這樣的,如果新加入乙個元素,如果size 大於了capacity,那麼vector 就會重新找一塊更大的地方再把資料放進去,下面進入除錯 這是原本vector首個元素的位址,這時size 和capacity 都是1,下面新增乙個元素讓size大於capacity 可以看到當...
vector記憶體的分配與釋放
1.vector的記憶體增長 vector其中乙個特點 記憶體空間只會增長,不會減小,援引c primer 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空間 拷貝元素 ...
vector記憶體分配簡單介紹
眾所周知,vector的size 其實並不代表它占用的空間,它實際占用空間可以用capacity 檢視 眾所周知,push back 時,如果size capacity則會使capacity從0變1或者變為原來兩倍,當然如果size眾 gui 所 cai 周 zhi 知 dao 一旦觸發記憶體分配,...