变量本身是否消耗内存?

xpo*_*ort 7 c#

当我们声明一个变量时,变量本身是否会消耗内存?

 class IHaveNothing
{
}

class IHaveNullFields
{
    string @string = null;
    StringBuilder @StringBuilder = null;
}

class Program
{      
    static void Main(string[] args)
    {
        IHaveNothing nothing = new IHaveNothing();
        IHaveNullFields nullFields = new IHaveNullFields();
    }
}
Run Code Online (Sandbox Code Playgroud)

实例nullFields比实例没有消耗更多的内存吗?

编辑:如果null局部变量而不是类'null字段,它们也消耗内存吗?

Tas*_*kos 12

是的,它们消耗机器的指针大小(至少).


Eri*_*ert 9

变量定义为存储位置.所以问题是:存储位置消耗内存吗?

当你这样说时,听起来很明显答案是肯定的.除了消耗内存之外,存储位置还能做什么?

它并不那么简单.局部变量根本不会消耗内存; 本地变量可能由抖动注册.在这种情况下,它既不会消耗堆栈也不会消耗堆内存.

你为什么在乎?CLR管理内存以为变量创建存储位置的方式是实现细节.除非您编写不安全的代码,否则您不必担心它.