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

时间:2012-09-13 08:59:08

标签: c# .net memory

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

但如果我有这个课程

public class Dummy{
    private int;
}

我的新课程将使用多少内存?如果它是一个结构,内存消耗会更低吗?我认为引用本身也会占用一些内存。

2 个答案:

答案 0 :(得分:15)

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

这个问题深入研究了类与结构(也在问题评论中提供):

Does using "new" on a struct allocate it on the heap or stack?

如评论中所述,只有类的实例才会消耗此引用开销,并且只有在某处有引用时才会消耗此引用开销。当没有引用时,该项目符合GC的条件 - 我不确定在没有任何引用的情况下类的大小是什么,我认为它是其内容的大小。

实际上,课程没有你可以依赖的真正“大小”。并且 最重要的 这不应该是使用类或结构的决定性因素(但是你倾向于找到指导大约16字节或以下类型的指南是合适的结构,以及上面倾向于类)。对我来说,决定因素是预期用途。

在谈论结构时,我觉得有必要提供以下链接:Why are mutable structs “evil”?

答案 1 :(得分:4)

一个类是一个引用类型,位于一个堆(并将从那里从garbabe收集器中删除)。 struct ist值类型并存储在堆栈中 在您的示例的情况下,Microsoft建议使用值类型(struct),因为引用类型会导致过多的开销。

如果您对此主题感兴趣,请查看Jeffrey Richter的“CLR via C#”一书。