我只是想知道,如果我有一个变量并且我将Nothing
(或Null
)分配给它,那么变量会占用多少内存?
例如
Dim i as Integer = Nothing
变量是否不使用内存?还是整数的大小,4个字节?基本上我认为这意味着没有分配值,因此在内存中没有任何值,所以它不应该没有内存。但是存储的信息是变量什么都没有,所以这些信息必须记忆,对吧? .NET和本地语言之间有区别吗?或者在价值和参考类型之间?
答案 0 :(得分:2)
正如@Tim Schmelter在评论中所说,赋值Nothing
是C#中default(T)
的VB.NET等价物。
Integer
总是占用4个字节,32位。无论你投入哪个价值都无关紧要。
但是,如果您有一个引用,它将在32位进程中占用4个字节,在64位进程中占用8个字节,无论您将哪个值放入其中。但是,Integer
或System.Int32
不是引用类型。
Nothing
这里并不意味着“没有引用”(正如我原先想的那样),只是你要将类型的默认值分配给变量。在这种情况下,Integer
的默认值为0.
因此,您的变量占用4个字节,因为它是System.Int32
。您拥有的代码只会为其分配值0
。
答案 1 :(得分:1)
一般来说:对Null的引用仅占用堆栈上引用本身的空间。在64位系统上应该是8字节。
在您的特定情况下:注意盒装值和未装箱值之间的差异!盒装整数是对Integer类实例的引用。实例未创建(Nothing),因此不占用空间。引用需要8个字节。
如果您使用的是未装箱的值(int),则需要占用int(struct)的空间,这正好是4个字节。请注意,这里没有涉及参考。
使用“常规”类而不是Integer的特殊情况将是一个更简单的示例。例如,考虑
Object o = new Object()
即使o
本身为空,它也会在堆栈上占用8个字节。