Int的大小为4个字节,如果我在程序中创建一个新的Int将使其内存消耗增加4个字节。正确?
但如果我有这个课程
public class Dummy{
private int;
}
我的新课程将使用多少内存?如果它是一个结构,内存消耗会更低吗?我认为引用本身也会占用一些内存。
答案 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#”一书。