VC6 STL補丁說明

來源:互聯網
上載者:User

原文地址:http://www.dinkumware.com/vc_fixes.html

Fix to algorithm

內建函式_Buffered_merge中的兩個局部變數未作初始化,VC6已作糾正。

Fix to deque

改動相當大,差不多是重寫了整個代碼。我未作分析。

Fix to fstream

該BUG主要影響效率,從代碼可以看出,只有當_Closef不等於_Openf1時才可能執行後面的_Mysb::_Init,這樣對於通過open方式開啟一指定檔案(函數為_Myt *open(const char *_S, ios_base::openmode _M))則有不好的效能。

Fix to istream

getline函數在處理終止符時存在問題,VC6已作糾正。

Fix to list

sort方法在元素數量大於等於32768時存在問題,測試代碼如下:

void test_list()
{
    cout << "list::sort test..." << endl;

    list<int> li1, li2; // 兩個list用於比較
    const int count = 32768; // 元素數量,>=32768將出現BUG

    vector<int> vi; // vector用於產生隨機序列
    vi.resize(count);
    for(int i=1; i<=count; ++i)
    {
        vi[i-1] = i;
        li1.push_back(i);
    }
    srand( time(0) );
    random_shuffle(vi.rbegin(), vi.rend());
    
    //copy(vi.begin(), vi.end(), ostream_iterator<int>(cout, " "));

    li2.resize(count);
    copy(vi.begin(), vi.end(), li2.begin());
    li2.sort(); // 排序
    //copy(li2.begin(), li2.end(), ostream_iterator<int>(cout, " "));

    bool res = (li1 == li2); // 比較二者
    cout << "  elements_count=" << count << ", result=" << res << endl;
}

Fix to memory

auto_ptr在賦值時存在問題,VC6已作糾正。

Fix to sstream

basic_stringbuf::overflow在處理記憶體增長時太緩慢,嚴重影響效能。

Fix to string

問題與istream類似,均為getline處理終止符時有問題。我未對該問題做分析,不知道它在什麼情況下出現以及有什麼後果。

Fix to vector

該問題不明顯,我不清楚它在什麼情況下會出現。按照其代碼,只有當_First或_Last受到意外改寫才可能造成問題。

Fix to xmemory

該問題不易出現,屬於編譯器的BUG。

Fix to xstring

P.J. STL中的的string採用了copy on write和reference counting技術,對於如下代碼:

string s1 = "abc"; // 語句1
string s2 = s1;    // 語句2
s2 = "123";        // 語句3

在執行語句2時,不會出現兩份"abc",而是讓s2與s1共用一份記憶體。

當執行語句3時,s2的值被改寫,這時才會單獨為其分配記憶體。

實現這一方式的手段是引用計數,為此,P.J. STL採用了一個巧妙的手段,即在分配記憶體時多申請了一個位元組的空間(位於起始處),這一位元組被用作引用計數,由此可知,其計數的最大值只能是255,該值用宏_FROZEN表示。

但是P.J. STL並沒有考慮引用計數在多線程環境下的同步問題,因此存在潛在的錯誤。解決這一問題最簡單的辦法是將_FROZEN的值改為0,即去掉引用計數功能。而完備的方案則需自己動手實現多線程同步。

Fix to xtree

改動較大,對map、multimap、set和multiset存在影響,未作分析。

(freefalcon於2006-04-11)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.