5

作成時に配列の長さを入力する必要があるため、しっかりした連続したメモリ ブロックが必要になると思います。List は動的に展開できますが、これは連続したメモリ割り当てを必要としないということですか? これは、リストが「メモリ不足」例外をスローする可能性が低いことを意味しますか?

4

3 に答える 3

1

List<T>のラッパーT[]です。つまり、 にList<T>は連続したメモリ領域と よりも多くのメモリが必要T[]です。詳細については、マシュー ワトソンの回答を参照してください。

OutOfMemoryExceptions を回避したい場合は、データ構造を細かく分割しようとする代わりに、プログラムを 64 ビット モードで実行することをお勧めします。これは、物理 RAM が不足するよりも連続した空きアドレス空間が不足する可能性が高いためです。今日はスワップ。プログラムを x64 モードで実行するには、anycpu としてコンパイルします (x86 は優先しません)。

Microsoft のプログラマーである Raymond Chen は、これに関するブログ記事を書いています: http://blogs.msdn.com/b/oldnewthing/archive/2013/06/28/10429807.aspx?Redirected=true#comments

于 2013-09-06T10:02:50.690 に答える
0

C#Listでは、連結リストではなく、配列に裏打ちされています。vectorC++のようなものです。メモリの連続ブロックを必要としないリストはLinkedList. ただし、速度が遅く、エラーが発生しやすいことが知られているため、注意してください。

Starcraft 開発者からの記事を参照してください (それ自体をよく読んでください): http://www.codeofhonor.com/blog/avoiding-game-crashes-related-to-linked-lists

于 2013-09-06T10:06:41.007 に答える