.NET數組的內存佈局是什麼?.NET數組的內存佈局
就拿此數組:
Int32[] x = new Int32[10];
據我所知,該陣列的體積是這樣的:
0000111122223333444455556666777788889999
其中每個字符是一個字節,和數字對應於索引爲陣列。
此外,我知道有一種類型的參考,和一個同步塊指數對於所有對象,所以上述可調節至這樣的:
ttttssss0000111122223333444455556666777788889999
^
+- object reference points here
另外,陣列的長度需要存儲,所以也許這是更正確的:
ttttssssllll0000111122223333444455556666777788889999
^
+- object reference points here
這是完整的嗎?數組中是否有更多數據?
我問的原因是我們正在試圖估計一個相當大的數據語料庫的幾個不同的內存表示會花費多少內存,並且數組的大小會有很大差異,所以在一種解決方案中,開銷可能會產生很大的影響,但在另一種解決方案中可能沒有那麼大。
所以基本上,對於一個數組來說,有多少開銷,那基本上是我的問題。
而在陣列不好小隊醒來之後,這部分解決方案是靜態構建一次引用通常類型的東西,所以在這裏不需要使用可生成列表。
請注意:同步塊會在methodtype引用之前出現。該變量包含一個指向方法類型引用(上面的'tttt`)的指針(引用),跳過同步塊部分。對於沒有特定尺寸或特定下限的數組,佈局實際上看起來像是`ssssttttllll000011 ... 9999NULL`。 – Abel 2009-12-09 00:27:02