私が取り組んできたバイトコード言語用の仮想マシンを開発しています。スタックにクラスを使用してSystem.Collections.Generic.Stack
いますが、スタック サイズを割り当てる方法はありますか? それとも、使用する独自のスタック オブジェクトを作成する必要がありますか?
6 に答える
Stack(Int32)コンストラクターのMSDNから:
スタックの容量は、スタックが保持できる要素の数です。要素がスタックに追加されると、内部配列を再割り当てすることにより、必要に応じて容量が自動的に増加します。
コレクションのサイズを見積もることができる場合は、初期容量を指定することで、スタックに要素を追加する際に多数のサイズ変更操作を実行する必要がなくなります。
TrimExcessを呼び出すことにより、容量を減らすことができます。
このコンストラクターはO(n)操作であり、nは容量です。
初期容量で構築できますが、スタックは必要に応じて大きくなります(アイテムを追加すると)。
容量を超えてプッシュしたときに自動的に新しいアイテムを追加したくない場合は、それを独自のクラスにカプセル化するか、余分なアイテムを削除する独自のスタックを作成する必要があります。
Stack<T> コンストラクター (Int32)を使用して、スタックの容量を指定できます。
var stack = new Stack<Foo>(1024);
1024 個を超えるアイテムを追加すると、スタックの容量が増えることに注意してください。これを望まない場合は、各プッシュの前にスタック サイズを確認できます。
if (stack.Count == 1024)
throw new StackOverflowException();
stack.Push(foo);
あなたの用語には多くの要望がStack
ありますが、初期容量を渡すことができるコンストラクターがあります:http: //msdn.microsoft.com/en-us/library/ahc986x9.aspx
ただし、スタックはメモリがある限り自由に大きくなるので、心配する必要はありません。
Stack(T)クラス
同じ任意のタイプのインスタンスの可変サイズ後入れ先出し(LIFO)コレクションを表します。
自分で動的にサイズを変更します。ただし、サイズを事前に割り当てたい場合は、Stackのコンストラクターのドキュメントを確認してください。スタックの初期サイズを設定できるオーバーロードがあります。