Sever開發者一般不是非常喜歡用STL容器來管理內存數據,原因可能是STL容器的內存回收策略未必非常適合Server:Server常駐內存,非常希望用過的內容能夠很快的回收。
使用vector的push_back 插入10000個對象後,在吧這10000個對象pop_back出去,申請的10000個對象的內存空間實際上並沒有立刻釋放掉。STL容器仍然保留這部分對象以備後續使用。
如果確實需要緊縮空vector的內存,可以使用vector的swap方法。
如vector A為需要緊縮的容器,可以建立一個臨時的vector B, 調用B.swap(A).
因為B為臨時對象,可以立即釋放,而A和B的內容交換了,即A是B。達到了內存緊縮的目的。
附上代碼一段:
#include <vector>
#include <iostream>
using namespace std;
typedef struct Block{
char dummy[1024];
}Block;
typedef vector<Block> BlkVector;
void show_space(BlkVector * blk_vec)
{
cout<<"size = "<< blk_vec->size() << ", capacity = " << blk_vec->capacity() << endl;
}
int main(int argc, char *args[])
{
BlkVector bv;
Block b;
show_space(&bv);
bv.push_back(b);
show_space(&bv);
for(int i = 0 ; i < 1000 ; i++)
{
bv.push_back(b);
}
show_space(&bv);
while( bv.size() > 0 )
{
bv.pop_back();
}
show_space(&bv);
BlkVector().swap(bv);
show_space(&bv);
}
vector::swap
public member function
void swap ( vector<T,Allocator>& vec );Swap content Exchanges the content of the vector by the content of vec, which is another vector of the same type. Sizes may differ.