天天看點

string源碼實作分析

  最近寫hashtable的實作的時候用模闆類的思想,在普通int,long,double類型的時候測試時沒問題的,當用到string的時候,一直有問題。

  實作的equal函數是比較粗暴的使用兩者所有對應記憶體位元組是否相似來比較的。

   我開始分析兩者的資料結構是否相同的

兩個賦成一樣的值,由于sizeof(data)=48

分别觀察結構體1(0012FB3C),和結構體2(0012FB6C)的差别

string源碼實作分析

 整數部分都一樣,而string的部分開始不同

為什麼string一樣的值,會不同,原因應該是string的資料結構的問題

再一測,果然有問題,列印結果都是32,相當于這裡的32個位元組裡儲存了一些基本資訊,但是文字内容都放在了其他的地方!!!

string源碼實作分析
string源碼實作分析

可以明顯的看到a,b的差别

如果字元短的話,string就把字元串放到buf裡,buf占16個位元組,而如果字元串比較長的話,就把字元串放到_Ptr所指向的記憶體裡

_Mysize記錄目前字元串的大小,_Myres記錄目前動态的記憶體結束點(0開始)

繼續閱讀