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