3

したがって、C#についての私の理解は、(単純な型ではなく)オブジェクトの配列を処理する場合、配列は単にオブジェクトへの参照の連続配列になるため、実際にオブジェクトを作成するには、各要素で「new」を呼び出す必要があるということです。それ。

Block[] blocks = new Block[10];

foreach(Block block in blocks)
{
    block = new Block();
}

'Block'これは、インスタンスをメモリ全体 に分散させると思います。

実際のオブジェクトをメモリに連続して保存したいのですが、C#でこれを行う方法はありますか?

4

2 に答える 2

2

オブジェクトを値型(つまり) にすると、プリミティブ ( 、など)structsのインスタンスが格納されるのと同じ方法で、それらは配列内で隣り合わせに格納されます。たとえば、次のように宣言するとintdouble

DateTime d[] = new DateTime[10];

は値型であるため、DateTimeオブジェクトはメモリ ブロックに連続して格納されます。コンストラクターも呼び出す必要がないことに注意してください。配列内のすべての s が初期化され、使用できるようになります。DateTimestruct

于 2012-07-22T11:19:11.390 に答える
1

おそらく、L1 キャッシュ ミスが心配ですよね。

あなたは運が悪いです。複数のオブジェクトを次々に割り当てると、オブジェクトがメモリ内で連続する可能性が高くなります。残念ながら、GC がその仕事をすると、オブジェクトがいたるところに散らばってしまう可能性があります。

編集:提案

それらをすべて 1 つの領域に配置する必要がある場合は、それらを値型にして配列を作成するか、アンセーフ コードを使用fixしてメモリ内に配置することができます。

于 2012-07-22T11:19:30.140 に答える