{
byte[][] a;
int[] b;
List<Node> c;
public Node()
{
a = new byte[3][];
b = new int[3];
c = new List<Node>(0);
}
}
没有单个公式可以计算出来。这在很大程度上取决于硬件,操作系统,平台,框架的版本,Windows的版本等。每个对象还具有许多与之相关的东西-指向类型,方法,线程,应用程序域,内存地址,syncroot对象的指针锁定。因此,没有100%准确的度量。
这将为您提供一个下限。您的实际对象将花费更多。
[还有其他计算方法,例如使用Interops,但最终,它们也将给出估计值(请参阅 How to get object size in memory?和Find size of object instance in bytes in c#)。
因此,在我的机器(x64,为任何CPU编译,以x64位进程运行,Windows Server 2012 R2,.NET 4.5上,这是一个估计,]是
[Serializable]
class Node
{
byte[][] a;
int[] b;
List<Node> c;
public Node()
{
a = new byte[3][];
b = new int[3];
c = new List<Node>(0);
}
}
[Test]
public void GetSize()
{
Node item = new Node();
object o = new object();
long size = 0;
using (Stream s = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(s, item);
size = s.Length; // <<<<< 918 bytes on my machine
}
}