在學習資料在記憶體中的儲存方式時突然想到這個問題,在查閱了資料後有點大概的思路,但是網上還是有看到不同的答案,如這裡的回答:
目前先把自己的感悟寫下來吧,以後懂了再更新。
這裡寫段小**跑一下做示例:
string s = "hello world";
console.writeline(s.length);//輸出11
byte data = system.text.encoding.unicode.getbytes(s);console.writeline(data.length);
//輸出22。
s.length=11不難理解。
data.length=22,表示字串s占用了22個位元組。由於c#使用的是utf-16進行轉碼,單個字元占用2個位元組,乙個位元組8位,在記憶體中可以看到單個字元剛好是16位。
比如h,ascii表中為68,在記憶體中的表示即為00 68(0000 0000 0110 1000)
(截圖來自搜狗百科)
字串在記憶體中的儲存 C語言高階
字串是以ascii字元nul結尾的字串行。ascii字元nul表示為 0.字串通常儲存在陣列或者從堆上分配的記憶體中。只是,並不是全部的字元陣列都是字串,字元陣列可能沒有nul字元。字元陣列也用來表示布林值等小的整數單元,以節省記憶體空間。c中有兩種型別的字串 單位元組字串 由char資料型別組成的...
java 掌握字串在記憶體中的分配
解決問題 和equals 的區別?string在記憶體中的分配?stringbuffer在記憶體中的分配?連線兩個字串後的記憶體情況?的底層原理是怎樣的?jdk1.7後常量池轉到堆中,畫圖沒考慮到,但意思 思路是正確的 舉例子 在某方法裡面。故宣告的物件放在棧 總結 1.string是不可變類,不能...
字串常量放在記憶體中的靜態儲存區
一 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆 就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙...