配列に固定されたメモリ領域が割り当てられているとすれば、配列の長さが不変であることが完全にわかります。配列はどのようにメモリ内で扱われますか?
私はArray [10]を持っているとしましょう - これは隣接するメモリの10スロットを割り当てますか?これらのスロットは隣接しており、所定の位置にあるので、索引ベースの検索は迅速です。
しかし、配列に複雑な型を入れていると、サイズが不揃いです配列内の実際のオブジェクトは同じ型であるかもしれませんが、保持するデータのサイズは大きく異なります。
どうすれば.Netがこれを処理しますか?私はオブジェクトに実際のデータを格納するためにシーケンシャルでないメモリを割り当てていると思いますが、これに関する正式な回答が必要です。たとえば、オブジェクトが特定のサイズを超えている場合は、非順次メモリを使用するだけですか?オブジェクトのサイズが常に変化している場合、ストレージの場所を最適化しようとし続けますか?私は、MyClassの配列を持っていると、実行時にサブアレイとサブアレイに割り振る起動する場合、今
public class MyClass
{
public MyClass[] PotentiallyHugeNestedStructure
}
:
は、このクラスを考えてみましょう。私は、ギザギザの配列の膨大なコレクションで終わることができます。
それでは、.netはどのようにこれをメモリ上で処理しますか?
*配列の実際のオブジェクト*?!いいえ、配列には、オブジェクトのメモリ位置(管理されたヒープ内)への参照が保持され、オブジェクト自体は保持されません。 – user3185569
@ user3185569なので、それらは実際には単にリンクされたリストにすぎませんか? –
'配列内の実際のオブジェクトは同じ型であるかもしれませんが、保持するデータのサイズは大きく異なります。データが異なっても、インデックスごとに割り当てられる記憶域は、割り当てられたメモリと同じ(int 4バイト)そのブロックに格納された値を保持することができます。 – Sherlock