vector 有乙個機制是這樣的,如果新加入乙個元素,如果size 大於了capacity,那麼vector 就會重新找一塊更大的地方再把資料放進去,下面進入除錯:
這是原本vector首個元素的位址,這時size 和capacity 都是1,下面新增乙個元素讓size大於capacity
可以看到當size 大於capacity 之後記憶體確實進行重新分配,vector首元素的位址發生了改變,而且原來的值也亂了,為什麼呢?下面給出解釋:
重新分配的過程:
申請一塊新的記憶體>>>拷貝資料>>>釋放原記憶體
所以,使用vector容器的時候可以預先空間,把capacity定得夠大,這樣可以盡量避免重新分配vector 的記憶體,不增加程式的負擔。
例:
int
vector的記憶體分配
stl中有個很重要的東西就是vector,開發中會經常用到,至少我是經常使用,vector的存在可以使開發者不必關心記憶體的申請和釋放。但是,vector的乙個缺點就是它的記憶體分配是按照2的倍數分配記憶體的。當當前容量對插入元素不夠時,分配一塊新的記憶體,這塊記憶體的容量是原vector容量的2倍...
vector記憶體的分配與釋放
1.vector的記憶體增長 vector其中乙個特點 記憶體空間只會增長,不會減小,援引c primer 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存。設想一下,當vector新增乙個元素時,為了滿足連續存放這個特性,都需要重新分配空間 拷貝元素 ...
vector記憶體分配簡單介紹
眾所周知,vector的size 其實並不代表它占用的空間,它實際占用空間可以用capacity 檢視 眾所周知,push back 時,如果size capacity則會使capacity從0變1或者變為原來兩倍,當然如果size眾 gui 所 cai 周 zhi 知 dao 一旦觸發記憶體分配,...