程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> STL 容器內存緊縮方法

STL 容器內存緊縮方法

編輯:關於C語言

   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.

After the call to this member function, the elements in this container are those which were in vec before the call, and the elements of vec are those which were in this. All iterators, references and pointers remain valid for the swapped vectors.

Notice that a global algorithm function exists with this same name, swap, and the same behavior.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved