3

C# 構造体は、ヒープ メモリを割り当てる代わりにスタックに完全に格納されるため、軽量データ オブジェクトのクラスよりもパフォーマンス上の利点があると考えられます。

その構造体のメンバーの 1 つが int[] または構造体の配列である場合、割り当てやその他のパフォーマンス上の利点にどのような影響がありますか?

例:

struct A
{
    int foo;
    int bar;
}

struct B
{
   int[] foos;
   A[] bars;
}

パフォーマンス、メモリ使用量などにおいて、構造体 A は構造体 B とどのように異なりますか?

4

2 に答える 2

2

サイズは型の一部ではないため、配列は動的に割り当てる必要があります。したがって、構造体には配列へのポインターが含まれているだけです。

構造体自体はスタック割り当て*ですが、配列の内容はまだヒープ上にあります。

*いつもの。匿名メソッドで使用される外部変数など、値の型がヒープに割り当てられる場合があります。そしてもちろん、それがヒープに割り当てられたオブジェクトの一部である場合、構造体はヒープにインラインで割り当てられます。おそらく他にもいくつかのコーナーケースがありますが、これはそれほど重要ではありません。

于 2012-06-27T01:38:55.497 に答える
0

構造体内の配列は、構造体のスタックとヒープの割り当てによるパフォーマンスの利点を損なうことはありません。実際に利益があった場合;)。配列インスタンスを作成すると、構造体内の配列がヒープに割り当てられます。

于 2012-09-21T15:29:44.287 に答える