很明顯,系統在收到我們需要建立乙個物件時,幫我們做了許多事情,比如:
/*
@1:開闢能放下我們所給字串大小的空間,開闢了多大呢,我們用sizeof測試一下,結果在上圖中,已經顯示出來為28,但我們明明是寫進去了個s1 = "i is string"應該是12個位元組啊,這裡為啥會是28呢,在記憶體中又是如何佔空間的呢?
@2:結果在回到我們的監視視窗,我們發現,s1下面多了size和catacity,根據名字就知道,這是說我們裡面的大小和容量。
@3:又有問題了 size=11。這系統吃了**了吧,明明12個啊,系統會犯初學者才犯的低階錯誤???,
@4:s1[11]='\0'才對啊,為啥在監視裡沒有s1[11]這個位址。
@5:catacity=15,容量為15,???這又是為啥??
@6:話不說滿,此處知識點還很多,留給以後發現問題的你和我
*/
想有解決上面這些問題,我們就要看記憶體了,
結論:
1,在建立string類物件時,系統會開闢用於存放字串的空間和管理該串的2個邊界size和catacity,
2,catacity 大小為15,31,63.。。(字串容量為:離該字串長度最接近的16的整數倍-1,如:size=12,catacity=15;size=24,catacity=31…)
3,設定catacity使得字串的用法簡單了,還考慮了記憶體對齊規則,方便了對記憶體的訪問,在一定長度內的字串操作(增,刪,改,查)減少空間大小變動的系統開銷.
前面我還提到乙個問題:是否有共用記憶體問題。答案是:沒有。
從這裡我們可以看到空間位址明顯不同。
C 中string和String的區別
string是string的別名。string是c 中的類,string是.net framework的類 在c ide中不會顯示藍色 c string對映為.net framework的string 如果用string,編譯器會把它編譯成string,所以如果直接用string就可以讓編譯器少做一...
C 中String和string的區別
在c 程式設計時,有時碰到string,有時碰到string,可是感覺二者都可以,所以決定總結下二者的區別。msdn microsoft developers network 中對string的說明 stringis analiasforstringin the net framework。即str...
c 中string與String的區別
在c 中,string 是 system.string 的別名,所以基本上在使用時是沒有差別的。習慣上,我們把字串當作物件時 有值的物件實體 我們用string。而我們把它當類時 需要字串類中定義的方法 我們用string,比如 string greet string.format hello pl...