在c#中分配堆栈大小

本文关键字:堆栈 分配 | 更新日期: 2023-09-27 18:03:17

我正在为我一直在研究的字节码语言开发一个虚拟机。我正在使用System.Collections.Generic.Stack类的堆栈,但有任何方法来分配堆栈大小?或者我只需要编写自己的堆栈对象来使用?

在c#中分配堆栈大小

From MSDN for Stack(Int32)构造函数:

一个堆栈的容量是指该堆栈可以容纳的元素的数量可以容纳。当元素被添加到堆栈中时,容量增加根据需要自动增加,通过重新分配内部数组。

如果集合的大小可以估计,则指定初始的容量消除了执行大量调整大小的需要

可通过调用TrimExcess减少容量。

构造函数是一个O(n)操作,其中n为容量。

您可以使用初始容量来构建它,但是堆栈将根据需要增长(当您向其中添加项时)。

如果你不想让它在超过它的容量时自动添加新项,你需要将它封装在你自己的类中,或者编写你自己的Stack来删除多余的项。

你可以使用Stack<指定堆栈容量的构造函数(Int32):>

var stack = new Stack<Foo>(1024);

请注意,如果您添加的项目超过1024项,堆栈将增加容量。如果你不想这样,你可以在每次push前检查堆栈大小:

if (stack.Count == 1024)
    throw new StackOverflowException();
stack.Push(foo);

您可以查看http://msdn.microsoft.com/en-us/library/ahc986x9.aspx

您的术语有很多需要改进的地方,但是Stack有一个允许您传递初始容量的构造函数:http://msdn.microsoft.com/en-us/library/ahc986x9.aspx

堆栈可以随你的内存大小自由增长,所以你不需要担心这个!

堆栈(T)类

表示变量大小的后进先出(LIFO)集合相同任意类型的实例。

它会动态调整自己的大小。但是如果您想预先分配它的大小,那么请查看Stack构造函数的文档。有一个重载可以用来设置堆栈的初始大小。