簡體   English   中英

std :: vector和內存分配

[英]std::vector and memory allocation

似乎每次向std::vector追加一個新元素時,如果沒有空元素,分配元素的數量會加倍(至少在GCC 4.9中)。 我認為這樣做是為了實現攤銷的恆定時間復雜度。

例如,運行此代碼后:

v.push_back (1);
v.push_back (2);
v.push_back (3);
v.push_back (4);
v.push_back (5);

v.shrink_to_fit(); // capacity is 5 now
v.push_back (6);

std::cout << v.capacity () << std::endl;

輸出為10。

在內存受限系統中,有沒有辦法防止這種行為,即使它是以性能損失為代價的?

此外,是否可以指出它應該只分配固定數量的元素而不是加倍?

我知道我可以在添加新元素之前調用std::vector::reserve() ,但在我的情況下看起來很亂...調用std::vector::shrink_to_fit()是另一種方法,但也不方便。

不,沒有辦法。

您唯一的選擇是編寫自己的矢量數據結構,這樣您就可以隨心所欲地執行任何操作(或者您只需復制Internet / c ++庫的實現並更改所需內容並在程序中包含該新矢量) 。

實際上你也可以使用數組和realloc命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM