我正在为我一直在研究的字节码语言开发一个虚拟机。我正在System.Collections.Generic.Stack
为堆栈使用该类,但有什么方法可以分配堆栈大小吗?还是我只需要编写自己的堆栈对象来使用?
6 回答
从MSDN获取 Stack(Int32) 构造函数:
Stack 的容量是 Stack 可以容纳的元素数量。随着元素被添加到堆栈中,容量会根据需要通过重新分配内部数组来自动增加。
如果可以估计集合的大小,那么指定初始容量就无需在向 Stack 添加元素时执行许多调整大小的操作。
可以通过调用 TrimExcess 来减少容量。
这个构造函数是一个 O(n) 操作,其中 n 是容量。
您可以使用初始容量来构建它,但堆栈会根据需要增长(当您向其中添加项目时)。
如果您不希望它在超过其容量时自动添加新项目,则需要将其封装在自己的类中或编写自己的 Stack 以删除多余的项目。
您可以使用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
堆栈可以自由增长,只要你有内存,所以你不需要担心这个!
堆栈(T)类
表示相同任意类型的实例的可变大小后进先出 (LIFO) 集合。
它会动态调整自己的大小。但是,如果您想预先分配它的大小,请查看Stack 的构造函数的文档。有一个重载,您可以使用它设置堆栈的初始大小。