這個問題在這里已經有了答案: 陣列在記憶體中是如何處理的? (1 個回答) 38 分鐘前關閉。
我知道當我制作一個像下面這樣的整數陣列時,每個專案都有一個特定的大小,每個專案都占用一個特定的記憶體空間(例如 32 位)。
int[] i = {1, 2, 3, 4, 5};
記憶體
[地址] [值] [大小]
[1000] [1] [32 位]
[1001] [2] [32 位]
[1002] [3] [32 位]
[1003] [4] [32 位]
[1004] [5] [32 位]
但是當我們有一個像下面這樣的字串陣列,它有不同大小的不同字串時,編譯器如何將它們存盤到記憶體中?
string[] words = {
"Hi",
"Foo",
"Alphabet",
};
Console.WriteLine (words[2]);
// output is "Alphabet"
首先,我認為每個專案占用的記憶體與最大專案一樣大,所以我將第二個字串更改為大于最大專案的內容,看看會發生什么。
string[] words = {
"Hi",
"Hopelessness",
"Alphabet",
};
Console.WriteLine (words[2]);
// output is still "Alphabet"
但是正如你所看到的,第三根弦仍然可以避免碰撞。
- 為什么會這樣?
- 編譯器是否將專案存盤到不同的空間?如果是這樣,它不會降低訪問大型陣列中專案的速度嗎?
uj5u.com熱心網友回復:
string[] words = {
"Hi",
"Hopelessness",
"Alphabet",
};
像這樣布置
words=>|Ref1|Ref2|Ref3|
| | |
| | > "Hi"
| > "Hopelessness"
> "Alphabet"
'words' 是對字串的參考陣列。參考基本上是一個智能指標。實際的字串在堆中,并且參考指向它們
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490700.html
