.net 什么都不占用多少内存?
我只是想知道,如果我有一个变量,我给它赋值.net 什么都不占用多少内存?,.net,memory-management,null,native,nothing,.net,Memory Management,Null,Native,Nothing,我只是想知道,如果我有一个变量,我给它赋值Nothing(或Null),那么这个变量会占用多少内存 比如说 Dim i as Integer = Nothing 变量是否不使用内存?还是整数的大小,4字节?基本上,我认为这意味着这个值没有赋值,因此内存中没有任何值,所以应该不需要内存。然而,存储的信息表明变量为零,所以这些信息必须占用内存,对吗?NET和本地语言之间有区别吗?或者在值和引用类型之间?一般来说:对Null的引用只占用堆栈上引用本身的空间。在64位系统上应该是8字节 在您的特定情况
Nothing
(或Null
),那么这个变量会占用多少内存
比如说
Dim i as Integer = Nothing
变量是否不使用内存?还是整数的大小,4字节?基本上,我认为这意味着这个值没有赋值,因此内存中没有任何值,所以应该不需要内存。然而,存储的信息表明变量为零,所以这些信息必须占用内存,对吗?NET和本地语言之间有区别吗?或者在值和引用类型之间?一般来说:对Null的引用只占用堆栈上引用本身的空间。在64位系统上应该是8字节 在您的特定情况下:请注意装箱和未装箱值之间的差异!装箱整数是对integer类实例的引用。实例未创建(无),因此不占用空间。引用需要8个字节 如果使用非固定值(int),它将占用int(struct)的空间,正好是4个字节。请注意,此处不涉及参考 使用“regular”类而不是带有Integer的特例将是一个更简单的示例。例如,考虑
Object o = new Object()
这占用堆栈上的8个字节,即使
o
本身是空的。一般来说:对Null的引用只占用堆栈上引用本身的空间。在64位系统上应该是8字节
在您的特定情况下:请注意装箱和未装箱值之间的差异!装箱整数是对integer类实例的引用。实例未创建(无),因此不占用空间。引用需要8个字节
如果使用非固定值(int),它将占用int(struct)的空间,正好是4个字节。请注意,此处不涉及参考
使用“regular”类而不是带有Integer的特例将是一个更简单的示例。例如,考虑
Object o = new Object()
这需要堆栈上的8个字节,即使o
本身是空的。如注释中所述,为Nothing
赋值是C#中的default(T)
的VB.NET等价物
整数
将始终占用4字节32位。不管你把哪个值放进去
但是,如果您有一个引用,它将在32位进程中占用4个字节,在64位进程中占用8个字节,这也与您输入的值无关。但是,整数
或System.Int32
不是引用类型
Nothing
这里并不意味着“无引用”(正如我最初所想的那样),只是将类型的默认值赋给变量。在这种情况下,Integer
的默认值为0
因此,您的变量占用4个字节,因为它是一个System.Int32
。您拥有的代码只会将值0
分配给它。如注释中所述,将值Nothing
分配给C#中的default(T)
是VB.NET等价物
整数
将始终占用4字节32位。不管你把哪个值放进去
但是,如果您有一个引用,它将在32位进程中占用4个字节,在64位进程中占用8个字节,这也与您输入的值无关。但是,整数
或System.Int32
不是引用类型
Nothing
这里并不意味着“无引用”(正如我最初所想的那样),只是将类型的默认值赋给变量。在这种情况下,Integer
的默认值为0
因此,您的变量占用4个字节,因为它是一个
System.Int32
。您拥有的代码只会将值0
分配给它。您真的可以在vb.net中声明一个类型为Integer
的值来保存Nothing
?值类型总是有一个值Nothing
仅使用该类型的默认值,在本例中为0
Dim foo As foo=Nothing
不存储任何内容。您可以使用null(Int32的)
来代替。好吧,这很有意义,但是可为null的引用类型呢?@jens:如上所述,null
/Nothing
的引用类型不需要在堆上存储任何内容,因为没有任何内容可存储。您混合了术语“可为null”仅当您将值类型包装在Nullable(Of T)
中时,才将其用于值类型。您真的可以在vb.net中声明类型为Integer
的值以保存Nothing
?值类型始终具有值Nothing
仅使用该类型的默认值,在本例中为0
Dim foo As foo=Nothing
不存储任何内容。您可以使用null(Int32的)
来代替。好吧,这很有意义,但是可为null的引用类型呢?@jens:如上所述,null
/Nothing
的引用类型不需要在堆上存储任何内容,因为没有任何内容可存储。您混合了术语“可为null”仅当您将值类型包装在null(Of T)
int
是一个基本结构时,才将其用于值类型,因此您可能希望避免将其称为类Nullable
也是一个结构。这说明引用需要8个字节,而实际对象没有任何其他内容。出于好奇,对于空引用,指针的值是多少(它是指针,对吗?;-)?@Jens不要忘记引用也只是一种值类型<引用类型上的code>null或Nothing
,与引用某些内容的引用相比,仍然会占用相同的空间。@Jens值为0。这是一个指针式的东西,但我们称之为引用。它比一些指针更受限制。好吧,这很好地总结了它,回答了我的问题