0

我只是想知道,如果我有一个变量并分配Nothing(或Null)给它,该变量占用多少内存?

例如

Dim i as Integer = Nothing

变量不使用内存吗?还是整数的大小,4 字节?基本上我认为这意味着没有分配值,因此内存中的任何地方都没有值,所以它不应该占用内存。但是存储了变量什么都没有的信息,所以这个信息必须占用内存,对吧?.NET 和本地语言之间有区别吗?还是在值类型和引用类型之间?

4

2 回答 2

2

正如@Tim Schmelter在评论中所说,分配的值是C# 中Nothing的 VB.NET 等效项。default(T)

AnInteger将始终占用 4 个字节,32 位。你投入的价值无关紧要。

但是,如果您有一个引用,它将在 32 位进程中占用 4 个字节,在 64 位进程中占用 8 个字节,无论您将哪个值放入其中。然而,一个IntegerSystem.Int32不是引用类型。

Nothing这里并不意味着“没有引用”(正如我最初认为的那样),只是您将类型的默认值分配给变量。在这种情况下,默认Integer值为 0。

因此,您的变量占用 4 个字节,因为它是一个System.Int32. 您拥有的代码只会为其分配值0

于 2014-05-07T09:57:33.013 回答
1

一般来说:对 Null 的引用只占用堆栈上引用本身的空间。在 64 位系统上应该是 8 字节。

在您的特定情况下:注意装箱值和未装箱值之间的区别!装箱整数是对 Integer 类实例的引用。该实例未创建(无),因此不占用空间。引用占用 8 个字节。

如果您使用的是未装箱的值 (int),它将占用 int (struct) 的空间,正好是 4 个字节。请注意,此处不涉及参考。

使用“常规”类而不是整数的特殊情况将是一个更简单的示例。例如,考虑

Object o = new Object()

这需要堆栈上的 8 个字节,即使它o本身是空的。

于 2014-05-07T09:54:19.203 回答