[英]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.