C# 创建新类或结构时.NET中的内存使用情况

C# 创建新类或结构时.NET中的内存使用情况,c#,.net,memory,C#,.net,Memory,Int的大小为4字节,如果我在程序中创建一个新的Int,它的内存消耗将增加4字节。对吧? 但是如果我上这门课 public class Dummy{ private int; } 我的新班级将使用多少内存?如果是结构,内存消耗会更低吗?我认为引用本身也会消耗一些内存。单个引用在32位进程上占用4字节,在64位进程上占用8字节。引用是类的标准开销(因为它们是引用类型)。结构不产生引用(好吧,忽略任何潜在的装箱),并且通常是其内容的大小。我记不起课程是否有更多的开销,我不这么认为 此问题深

Int的大小为4字节,如果我在程序中创建一个新的Int,它的内存消耗将增加4字节。对吧?

但是如果我上这门课

public class Dummy{
    private int;
}
我的新班级将使用多少内存?如果是结构,内存消耗会更低吗?我认为引用本身也会消耗一些内存。

单个引用在32位进程上占用4字节,在64位进程上占用8字节。引用是类的标准开销(因为它们是引用类型)。结构不产生引用(好吧,忽略任何潜在的装箱),并且通常是其内容的大小。我记不起课程是否有更多的开销,我不这么认为

此问题深入探讨了类与结构(也在问题注释中提供):

如注释中所述,只有类的实例才会使用此引用开销,并且只有在某个地方有引用时才会使用。当没有引用时,该项将符合GC的条件-我不确定没有任何引用时堆上的类的大小,我假定它是其内容的大小

实际上,类并没有一个你可以依赖的真正的“大小”。最重要的是这不应该是使用类或结构的决定性因素(但您往往会发现一些指导原则,指出大约16字节或以下的类型可以是合适的结构,而高于16字节的类型则倾向于类)。对我来说,决定因素是预期用途


当谈到结构时,我觉得有义务提供以下链接:

类是引用类型,位于堆的一个位置(将从garbabe收集器中删除)。结构列表值类型,并存储在堆栈上。
在您的示例中,Microsoft建议使用值类型(struct),因为引用类型会导致太多开销


如果您对本主题感兴趣,请阅读Jeffrey Richter的《通过C#实现CLR》一书。

int
是4字节,32位。引用在32位系统上为4字节,在64位系统上为8字节。引用是类的标准开销(因为它们是引用类型),结构不产生引用,通常是其内容的大小。我不记得类是否有更多的开销,不要这样认为。@Adamhuldsworth,你的第一个评论应该是答案没有人能比Jon Skeet更好地解释类与结构的关系:类本身不消耗内存,只有类的实例才会消耗内存。一个小问题:这是过程,而不是系统,它确定字节数。x64机器上的x86进程将使用4字节,而不是8字节,对吗?@Sugrue不确定,CLR在这里也起到了作用。。。如果我没记错的话,有32位和64位CLR。我稍微改写一下。我觉得这太简单了。涵盖了这一点,简短的版本是值类型并不总是出现在堆栈上。