代码之家  ›  专栏  ›  技术社区  ›  Rob.Ak

正在从中弹出项目。NET的堆栈类减少了内存使用?

  •  0
  • Rob.Ak  · 技术社区  · 8 年前

    Stack<T> 减少该堆栈的内存使用?

    堆叠(<);T> 是作为数组实现的,所以我猜通过弹出一个项,只有顶部元素的指针被移动到前一个元素,保持所有元素不变。

    有人知道吗?

    2 回复  |  直到 8 年前
        1
  •  0
  •   InBetween    8 年前

    否,堆栈的内存使用将保持不变。然而,如果 T

    如果 T 是一种值类型,那么它没有任何区别,因为任何给定的 default(T) 将具有相同的内存占用。

        2
  •  -1
  •   Gabriel Luci    8 年前

    看看源代码: https://referencesource.microsoft.com/#System/compmod/system/collections/generic/stack.cs,fd86d7436e55c84b,references

        // Pops an item from the top of the stack.  If the stack is empty, Pop
        // throws an InvalidOperationException.
        /// <include file='doc\Stack.uex' path='docs/doc[@for="Stack.Pop"]/*' />
        public T Pop() {
            if (_size == 0)
                ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EmptyStack);
            _version++;
            T item = _array[--_size];
            _array[_size] = default(T);     // Free memory quicker.
            return item;
        }
    

    default 所以 如果是引用类型