天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考

系列文章導航:

[你必須知道的.NET] 開篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對抽象編程:接口和抽象類

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類型---從通用類型系統(tǒng)開始

[你必須知道的.NET] 第八回:品味類型---值類型與引用類型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類型---值類型與引用類型(中)-規(guī)則無邊

[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開始認識IL

[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫和重載

[你必須知道的.NET] 第十八回:對象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學習方法論

[你必須知道的.NET]第二十一回:認識全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考


說在,開篇之前

走鋼絲的人,在刺激中體驗快感。帶著問題思考,在問題上迸發(fā)火花。

或者給問題以答案,或者給答案以問題,你可能永遠無法看清全部,但是總能從一點突破很多。事實的關(guān)鍵就在于面對問題,我該如何思考?

String Interning(字符串駐留)就是這樣一個值得思考的話題,帶著問題思考,我們至少要理清以下幾個問題:

  • 什么是string?
  • 什么是字符串駐留?
  • 字符串駐留的運行機制及執(zhí)行過程?
  • 字符串駐留的其他問題?

帶著幾個問號,你必須知道的.NET,繼續(xù)更多體驗。

系列文章導航:

[你必須知道的.NET] 開篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對抽象編程:接口和抽象類

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類型---從通用類型系統(tǒng)開始

[你必須知道的.NET] 第八回:品味類型---值類型與引用類型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類型---值類型與引用類型(中)-規(guī)則無邊

[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開始認識IL

[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫和重載

[你必須知道的.NET] 第十八回:對象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學習方法論

[你必須知道的.NET]第二十一回:認識全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


 

2 欲求思考

欲求思考,則從基本開始,對于理解整個string intern機制是大有裨益的,因此深入的第一步就從基本概念開始。隨著我們分析的層層深入,就會發(fā)現(xiàn)看似曲折的結(jié)果,原來不過如此而已,這正是技術(shù)探求的最佳方式。

什么是string

什么是string呢,提起這個問題,我想下面的圖例可以給出一點啟示:

 

string在本質(zhì)上就是一連串的有順序的字符集合。

簡單的說,string就是char[],而在.NET中string頭一回具有了類的概念,暗合了.NET一切皆為對象的大一統(tǒng)格局?;貧w本質(zhì),我們重新審視如此另類而多彩的string,你會不禁明白,string本質(zhì)上就是一個16位Unicode字符數(shù)組。打開string的Disassemble代碼,我們可直擊其本質(zhì):

    [Serializable, ComVisible(true)]
    public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>,
 IEnumerable<char>, IEnumerable, IEquatable<string>
    {
    }

系列文章導航:

[你必須知道的.NET] 開篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對抽象編程:接口和抽象類

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類型---從通用類型系統(tǒng)開始

[你必須知道的.NET] 第八回:品味類型---值類型與引用類型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類型---值類型與引用類型(中)-規(guī)則無邊

[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開始認識IL

[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫和重載

[你必須知道的.NET] 第十八回:對象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學習方法論

[你必須知道的.NET]第二十一回:認識全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


 

什么是字符串駐留(String Interning)

回歸經(jīng)典,我們首先給出MSDN對于字符串駐留的一點討論:

公共語言運行庫通過維護一個表來存放字符串,該表稱為拘留池,它包含程序中以編程方式聲明或創(chuàng)建的每個唯一的字符串的一個引用。因此,具有特定值的字符串的實例在系統(tǒng)中只有一個。

例如,如果將同一字符串分配給幾個變量,運行庫就會從拘留池中檢索對該字符串的相同引用,并將它分配給各個變量。

之所以,將string這個熟悉的命題拿出來造輪子,并不是再造個輪子自己陶醉。關(guān)于string的輪子,實在太多了,而且個個不順眼,它就像編程的精靈,四處可見隨處都有。string是如此的重要,以至于CLR必須以特殊的方式來實現(xiàn)對string類型的管理、存取和布局,在這些復雜的特殊表象中,字符串駐留機制是string特殊性的集中體現(xiàn),它的基本原理可以概括為:

  • CLR維護一個類似于哈希表的內(nèi)部結(jié)構(gòu),用于維護對于字符串的統(tǒng)一管理。
  • 但JIT編譯時,CLR首先查找哈希表,如果沒有找到匹配的字符串記錄,則在托管堆中創(chuàng)建新的string實例,并為哈希表添加一個鍵值對記錄;下一次查找相同string時,則只返回該記錄的值給第二次創(chuàng)建的string對象。
  • 通過這種方式,字符串駐留機制有效實現(xiàn)了對string的池管理,節(jié)省了大量的內(nèi)存空間。

詳細的字符串駐留機制,敬請參考:

快捷參考

關(guān)于字符串駐留機制的詳細過程,不是本文所要解決的主要問題,你可以參考:

NET技術(shù)[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲人人为我我为人人 | 大陆女人内谢69XXXORG | 久久综合中文字幕佐佐木希 | 国产成人在线播放 | 国产精品热久久高潮AV袁孑怡 | 久久99re6国产在线播放 | 亚洲黄色在线视频 | 扒开老师大腿猛进AAA片邪恶 | 亚洲无AV在线中文字幕 | 色窝窝亚洲AV在线观看 | 无码毛片内射白浆视频 | 青青草色青伊人 | 久久精品综合网中文字幕 | 久久九九少妇免费看A片 | 99久久香蕉国产线看观看 | 毛片免费在线播放 | 国产三级精品三级在线观看 | www.青青草原 | 黄色三级三级免费看 | 欧美精品XXXXBBBB | 中文字幕无码A片久久 | 国产精品玖玖玖影院 | 在线观看免费视频播放视频 | 日夜啪啪一区二区三区 | 精品无码乱码AV | 成人免费一区二区无码视频 | 一个色夫导航 | 亚州精品永久观看视频 | 九九大香尹人视频免费 | 女人被躁到高潮嗷嗷叫小 | 大胆国模一区二区三区伊人 | 中文无码热在线视频 | 精品视频中文字幕 | 国产精品美女久久久网站动漫 | 学生无码AV一区二区三区 | 亚洲精品第一页中文字幕 | 午夜国产精品影院在线观看 | 亚洲免费三区 | 日本2021免费一二三四区 | 暖暖直播免费观看韩国 | 语文老师扒开胸罩喂我奶 |