C 中vector記憶體擴充機制

2021-07-17 03:42:54 字數 812 閱讀 7101

為了支援隨機訪問,vector中的元素採用順序存放,即每乙個元素緊挨著前乙個元素進行儲存。那麼現在只有可能出現問題了,當記憶體中沒有足夠連續的空間去存放新插入來的元素怎麼辦,c++是這樣處理的:重新分配記憶體空間,將原來舊的元素全部複製到新的儲存空間中去,然後再插入新的元素。因此可以看出,如果記憶體不是特別充足或者記憶體中沒有較大塊的空閒空間的,向vector容器中插入元素可能會有相當大的cpu開銷。其中最糟糕的情況是每次插入乙個元素,程式要將所有的元素複製到乙個新的記憶體塊上去,當然對於這種情況c++作了乙個折衷的處理:當我們插入元素時,如果老的記憶體塊是連續空閒空間不夠,則重新分配一塊記憶體空間,記憶體空間的大小不是只比舊的記憶體空間大乙個元素的大小,相反而是多分配幾個元素空間大小,這樣對於接下來的幾個新插入元素做到有空間可以插入,這樣之後使得vector的效能得到很大提高,不過這是乙個折衷的辦法。

vectorfor(int i = 0; i < 10; i++)

vec.push_back(i);

vectorfor(int i = 0; i < 5; i++)it++;cout<<&(*it)<< <<*it

cout<<&(*it)<< <<*it<行啦,我給出來吧,具體原因可能要你自己去分析了,其實從上面的解釋可以看出原因

003bb93c 33

003bb940 5

呵呵,是不是有點像陣列的隨機插入,要將插入點後的所有資料往後移動。這麼說的話,可能沒有用鍊錶高效。

不過根據c++ primer作者給出的解釋,vector的實際使用效率要比list和deque要高一點。主要還是要看應用場景吧。

vector記憶體釋放機制

vector 中的內建有記憶體管理,當 vector 離開它的生存期的時候,它的析構函式會把 vector 中的元素銷毀,並釋放它們所占用的空間,所以用 vector 一般不用顯式釋放 不過,如果你 vector 中存放的是指標,那麼當 vector 銷毀時,那些指標指向的物件不會被銷毀,那些記憶體...

vector記憶體機制和效能分析

關於vector,簡單地講就是乙個動態陣列,裡面有乙個指標指向一片連續的記憶體空間,當空間不夠裝下資料時會自動申請另一片更大的空間,然後把原有資料拷貝過去,接著釋放原來的那片空間 當釋放或者說是刪除裡面的資料時,其儲存空間並不會釋放,僅僅只是清空了裡面的資料。接下來,我會詳細地說說這些。一 首先,看...

C STL中vector的記憶體機制和效能分析

vecotr是動態陣列,顧名思義他可以動態的增加自己的長度。但是怎樣的增加自己的長度?vector有兩個函式乙個是capacity 返回記憶體空間即緩衝區的大小,另乙個是size 返回當前陣列中數的數量。vector增加元素來說,當容量已經不能放進資料了,那麼他會重新申請一塊記憶體,把之前的記憶體利...