Выделить размер стека в C #? - PullRequest
2 голосов
/ 22 июля 2011

Я занимаюсь разработкой виртуальной машины для языка байт-кода, над которым я работаю.Я использую класс System.Collections.Generic.Stack для стека, но есть ли способ выделить размер стека?Или мне просто нужно написать свой собственный объект стека для использования?

Ответы [ 6 ]

4 голосов
/ 22 июля 2011

С MSDN для конструктора стека (Int32):

Емкость стека - это количество элементов, которое может вместить стек.Когда элементы добавляются в стек, емкость автоматически увеличивается по мере необходимости путем перераспределения внутреннего массива.

Если размер коллекции может быть оценен, указание начальной емкости устраняет необходимость выполнения ряда изменений размераопераций при добавлении элементов в стек.

Емкость можно уменьшить, вызвав TrimExcess.

Этот конструктор - операция O (n), где n - емкость.

3 голосов
/ 22 июля 2011

Вы можете построить его с начальной емкостью , но стек будет увеличиваться по мере необходимости (по мере добавления предметов к нему).

Если вы не хотите, чтобы он автоматически добавлял новые элементы, когда вы продвигаете его за пределы его емкости, вам нужно будет инкапсулировать его в свой собственный класс или написать свой собственный стек, который удаляет лишние элементы.

2 голосов
/ 22 июля 2011

Вы можете использовать Stack Constructor (Int32) , чтобы указать емкость стека:

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

Обратите внимание, что стек будет увеличивать емкость, если вы добавите большечем 1024 шт.Если вы не хотите этого, вы можете проверять размер стека перед каждым нажатием:

if (stack.Count == 1024)
    throw new StackOverflowException();
stack.Push(foo);
1 голос
/ 22 июля 2011
1 голос
/ 22 июля 2011

Ваша терминология оставляет желать лучшего, но Stack имеет конструктор, который позволяет передавать начальную емкость: http://msdn.microsoft.com/en-us/library/ahc986x9.aspx

Хотя размер стека может увеличиваться настолько, насколько у вас есть памятьтак что вам не нужно об этом беспокоиться!

0 голосов
/ 22 июля 2011

Stack (T) Class

Представляет коллекцию переменных (LIFO) с переменным размером «последний пришел-первым вышел».

Динамически изменяет размер.Но если вы хотите предварительно выделить его размер, посмотрите документацию о конструкторе стека .Существует перегрузка, с помощью которой вы можете установить начальный размер стека.

...