如何为C#类分配内存?

时间:2018-04-26 00:58:52

标签: c# .net

我有一个这样的课程,

public class Cube
{
    private int[,] data;

    public Cube()
    {
        data[,] = new int[3,3];
        data[0,0] = 1;
        data[1,0] = 2;
        // etc
    }

    public void RotateFrontOfCube()
    {
        // code
    }

    public void RotateBackOfCube()
    {
        // code
    }

如果我有一个字典并将此类的实例添加到字典中,将使用多少内存?

类的实例是否仅仅代表了类所需的数据?还是数据和方法?

如果我向类中添加更多代码,内存使用量是否会增加此类的实例?

我正在构建这个数据的树,试图分析rubiks立方体解决方案,但它使用了大量的内存。

顺便说一句,我上面的课程已经简化了,并没有代表完整的rubiks立方体数据。

1 个答案:

答案 0 :(得分:0)

如果我有字典并将此类的实例添加到字典中,将使用多少内存?

这是当然定义的实现,但在.NET Framework& Core内部,Dictionary有一些与其元素数相关的线性开销 - 这将是棒球4 +(8 +存储TKey(或对它的引用)的大小+大小存储TValue(或对其的引用))。

请参阅:https://referencesource.microsoft.com/mscorlib/System/collections/generic/dictionary.cs.html

在您的情况下,TValue将是一种参考类型,因此请参阅How big is an object reference in .NET?

该类的实例是否仅仅代表了该类所需的数据?或数据加方法?

只是实例本身的数据。 (虽然再一次,我认为这是实现定义的。)

如果我向该类添加更多代码,内存使用量是否会增加此类的实例?

没有。见Where are methods stored in memory? ...(虽然我再次假设这是实现定义的。)