線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1070
推到 Plurk!
推到 Facebook!

請問vector reserve所配置的記憶體是多少?

尚未結案
scott777
一般會員


發表:10
回覆:15
積分:5
註冊:2002-08-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-08 15:36:17 IP:61.230.xxx.xxx 未訂閱
假設
class Member{
private:
    int a;
    int b;
    char c[20];
public:
    Member(){};
    ~Member(){};
}    main()
{
    vector mem;
    mem.reserve(20);
}    則vector配置了20個記憶體位置,那麼實際上此
vector到底配置了多少記憶體容量呢?
是 20*sizeof(Member) = 20*28 = 560 bytes
還是 20*4(指向每個元素指標)=80 bytes呢?    
程式寫了一兩年,發現總是走在懸捱邊緣!!!
happosai
高階會員


發表:93
回覆:228
積分:109
註冊:2002-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-17 23:32:28 IP:218.166.xxx.xxx 未訂閱
請參考 "C 標準程式庫" P.149 看看 capacity() 這個 member function 的解釋
scott777
一般會員


發表:10
回覆:15
積分:5
註冊:2002-08-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-20 15:14:53 IP:61.230.xxx.xxx 未訂閱
引言: 請參考 "C 標準程式庫" P.149 看看 capacity() 這個 member function 的解釋
你可能誤會我的意思了,我是指配置了多少的記憶體位址 ,而不是vector配置的容量大小,因為capacity是取的vector 現在配置了多少空間,而我一開始就保留了20個空間,所以 取出來當然是20摟. 所以我認為應該是 20*4(指向每個元素指標)=80 bytes 的可能性比較大, 當然最好是直接看reserve的source code 會比較正確的.
happosai
高階會員


發表:93
回覆:228
積分:109
註冊:2002-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-22 00:20:33 IP:218.166.xxx.xxx 未訂閱
抱歉,沒看清楚你的問題,答案我可以確定是 20*sizeof(Member)=560bytes,reserve() 會呼叫下面的 function    
//_alloc.h Ln.355
return __n != 0 ? __REINTERPRET_CAST(value_type*,__sgi_alloc::allocate(__n * sizeof(value_type))) : 0;
其中 __n = 20,sizeof(value_type)=sizeof(Member),所以答案是560bytes ,"C 標準程式庫"的vector範例也有用到reserve()這個函數,把範例放到 bcb6 用編譯,然後 trace push_back() 這個member function,你會發現他用到了 placement new 的技巧......:) 發表人 - happosai 於 2004/01/22 00:24:43 發表人 - happosai 於 2004/01/22 00:25:47
系統時間:2024-05-18 11:52:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!