![](/img/trans.png)
[英]C++ Using `.reserve()` to pad `std::vector`s as a way of protecting against multithreading cache invalidation and false sharing
[英]std::vector::reserve Invalidation
如果我調用std::vector::reserve
為我的向量保留一定數量的內存,那么這個內存是否會被分配,直到我銷毀我的vector
或者是否有任何方法調用(可能是clear
)將釋放我的保留內存?
編輯 :我將重復使用容器很多次,所以出於性能原因我想避免內存分配。 正是出於這個原因,我預先保留了內存,所以我想確定我沒有做任何事情來丟失分配的內存。
clear
只影響大小,而不影響容量。 C ++ 11中的shrink_to_fit
可能就是你要找的東西。
編輯:我將重復使用容器很多次,所以出於性能原因我想避免內存分配。 正是出於這個原因,我預先保留了內存,所以我想確定我沒有做任何事情來丟失分配的內存。
你只需要避免兩件事:
1. shrink_to_fit ,但它只是一個釋放內存的請求,它不是向量實際執行此操作的必要條件。
2.只有使用空向量進行swap
才能確保更改容量(請參閱參見ideone ):
vector<int> v;
v.reserve(100);
vector<int>().swap(v);
ASSERT(v.capacity() == 0);
無論是pop_back , 清除還是調整大小都不會降低矢量容量。
順便說一下,考慮使用std :: array <> 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.