1

両方が値型であり、両方が参照型である場合、ArrayList と Generic List のメモリ割り当てに関する概念を明確にしたいと思います。誰か助けて片付けてくれませんか?

4

3 に答える 3

2

メモリ使用量の唯一の違いは、Value 型を格納する場合です。ArrayList は、値をボックス (コピー) する必要があります。ボックス化された値がヒープに配置され、少なくとも追加のヘッダー ブロック (約 20 バイト) を消費します。

しかし、これは何百万ものアイテムを保存する場合にのみ重要であり、常に行うことではありません.

于 2012-09-26T18:06:55.740 に答える
1

どちらも参照型です。唯一の違いは、ArrayList弱い型付けであるということです。そこに格納されているint、boolなどの値型は、object型にボックスで囲まれています。次に、の各アイテムをキャストするときに、それらのボックスを解除しますArrayList

すべてがオブジェクトにボックス化されているため、さまざまなタイプのオブジェクトをに格納できますArrayList

ジェネリックリストは強く型付けされています。つまり、同じ型のオブジェクトを格納できます。ボクシングがないので、より効率的です。

ボクシングプロセスは、オブジェクトをウィークタイプにカプセル化するためにより多くのメモリを割り当てますobject

参照型のオブジェクトのみをArrayListに格納した場合、ボクシングは使用されず、参照変換と呼ばれる別のメカニズムが使用されます。

于 2012-09-26T18:03:00.167 に答える
0
  • ArrayListは参照型ですが、タイプセーフではなく、効率が悪いです
  • List<T>またはジェネリックリストは参照型ですが、タイプセーフで効率的です

参照型のメモリ割り当てに関する SO の投稿は 、C# の参照型にどのようにメモリが割り当てられていますか?

于 2012-09-26T18:04:53.557 に答える