c#在没有任何变量的树中分配多少内存?

c#在没有任何变量的树中分配多少内存?,c#,data-structures,tree,C#,Data Structures,Tree,我用这种方式在c#中实现了一个类似树的东西: public class node { public node parent = null; public node leftChild = null; public node rightChild = null; } 现在在我下面写的代码中的某个地方 node firstNode = new node(); firstNode.rightChild = new node(); firstNode.rightChi

我用这种方式在c#中实现了一个类似树的东西:

public class node {
    public node parent = null;
    public node leftChild = null;     
    public node rightChild = null;
}
现在在我下面写的代码中的某个地方

node firstNode = new node();
firstNode.rightChild = new node();
firstNode.rightChild.parent = firstNode;
我的问题是这段代码分配了多少内存?正如您所看到的,这里没有任何像integer或double这样的变量。我想知道在这样的结构中,我们不使用指针,我们应该如何知道内存分配。我们确信这是存储在内存中的,但是没有确切的变量来聚合它们,并说这段代码分配了这么多的内存。
我想知道在上面的代码中“引用一个实例需要多少内存”

C#引用没有什么神奇之处,它们的工作方式与C指针基本相同

您的
节点
对象由三个引用组成,因此分配一个新实例将占用堆上相当于三个引用的空间

firstNode
局部变量将占用堆栈上一个引用的大小


对象引用与指针大小相同,在32位CPU上通常为4字节,在64位CPU上为8字节。Net CLR上的对象也有8字节的开销,因此在32位系统上,
节点
实例的大小将是8+3*4=20字节。

C#引用没有什么神奇之处,它们的工作方式与C指针的工作方式基本相同

您的
节点
对象由三个引用组成,因此分配一个新实例将占用堆上相当于三个引用的空间

firstNode
局部变量将占用堆栈上一个引用的大小


对象引用与指针大小相同,在32位CPU上通常为4字节,在64位CPU上为8字节。Net CLR上的对象也有8字节的开销,因此在32位系统上,
节点
实例的大小为8+3*4=20字节。

该类当然有变量,这三个节点引用是占用对象空间的字段。就存储而言,与int类型的字段没有根本区别。它们是运行时的指针,在32位模式下每个指针4个字节,在64位模式下每个指针8个字节。由于您只能在32位模式下担心对象大小,因此对象将占用8+3*4=20字节。前8个字节是对象开销,任何对象都有。

类当然有变量,这三个节点引用是占用对象空间的字段。就存储而言,与int类型的字段没有根本区别。它们是运行时的指针,在32位模式下每个指针4个字节,在64位模式下每个指针8个字节。由于您只能在32位模式下担心对象大小,因此对象将占用8+3*4=20字节。前8个字节是对象开销,任何对象都有。

这不是有效的C代码。这不是语法上正确的地方,在运行时总是为变量分配内存,即使它只是您的平台基础。除此之外,类定义还需要占用内存。类的实例占用内存。如果您特别询问引用一个实例需要多少内存(如上面的示例所示),您可以重新表述您的问题。可能重复您正在查看的平台
WORD
每个引用的大小以及对象的通常开销。。例如带有类型对象指针(带有vtable等)的标头、同步块索引。。不过真的。。这有什么关系?这不是有效的C#代码。从语法上讲,在运行时总是有分配给变量的内存,即使它只是您的平台基础。除此之外,类定义还需要占用内存。类的实例占用内存。如果您特别询问引用一个实例需要多少内存(如上面的示例所示),您可以重新表述您的问题。可能重复您正在查看的平台
WORD
每个引用的大小以及对象的通常开销。。例如带有类型对象指针(带有vtable等)的标头、同步块索引。。不过真的。。这有什么关系?引用在堆栈上。。它们指向堆上的数据。是的…:)编辑:我刚刚意识到你在回答中进一步澄清了这一点。我的错!引用在堆栈上。。它们指向堆上的数据。是的…:)编辑:我刚刚意识到你在回答中进一步澄清了这一点。我的错!