.NET 配列のメモリ レイアウトとは何ですか?
たとえば、次の配列を取ります。
Int32[] x = new Int32[10];
配列の大部分が次のようなものであることを理解しています。
0000111122223333444455556666777788889999
各文字は 1 バイトで、数字は配列のインデックスに対応します。
さらに、型参照とすべてのオブジェクトの syncblock-index があることを知っているので、上記をこれに合わせて調整できます。
ttttssss0000111122223333444455556666777788889999
^
+- object reference points here
さらに、配列の長さを保存する必要があるため、おそらく次のほうが正しいでしょう。
ttttssssllll0000111122223333444455556666777788889999
^
+- object reference points here
これで完了ですか?配列にさらにデータがありますか?
私が尋ねている理由は、かなり大きなデータコーパスのいくつかの異なるメモリ内表現がどれだけのメモリを必要とするかを見積もろうとしているからです.配列のサイズはかなり異なります.一方のソリューションでは大きな影響がありますが、もう一方のソリューションではおそらくそれほど影響はありません。
基本的に、配列の場合、どのくらいのオーバーヘッドがあるか、それが基本的に私の質問です。
そして、配列が悪い分隊が目覚める前に、解決策のこの部分は静的な一度だけ参照されるタイプのものであるため、ここでは成長可能なリストを使用する必要はありません。