C# 在类中声明新数组时,内存分配是否存在差异?

C# 在类中声明新数组时,内存分配是否存在差异?,c#,memory,C#,Memory,类myObjectA和myObjectB的内存使用/分配是否存在差异 例如,如果我不想为该类的每个对象添加速度,那么在类中使用新的float[2]是否会占用更多内存 另外,“itemA”的内存使用情况如何?如果我创建了一个新的“myObjectA”对象,但我没有添加一个新的itemA,也就是它的null,它仍然使用内存吗 如果我创建一个新的“ItemA”(myItem),然后创建一个新的“myObjectA”(myObject),它将使用多少内存,myObject.item=myItem我假设它

myObjectAmyObjectB的内存使用/分配是否存在差异

例如,如果我不想为该类的每个对象添加速度,那么在类中使用新的float[2]是否会占用更多内存

另外,“itemA”的内存使用情况如何?如果我创建了一个新的“myObjectA”对象,但我没有添加一个新的itemA,也就是它的null,它仍然使用内存吗

如果我创建一个新的“ItemA”(myItem),然后创建一个新的“myObjectA”(myObject),它将使用多少内存,
myObject.item=myItem我假设它是一个指向(myItem)作为引用的指针,但该指针将使用多少内存?将其保留为null有什么区别吗

示例C#


在创建时,这两个类的内存使用情况有所不同。正如您所指出的,
myObjectA
将有未分配的变量,而
myObjectB
将为这些变量分配数组

一旦将对象分配给
myObjectA
中的变量,指针将设置为这些对象,内存使用将由这些数组的大小决定。假设您打算将它们完全像在
myObjectB
中一样创建为float[2],那么
myObjectA
myObjectB
将使用相同的内存量

至于未赋值变量的大小,虽然指针不会指向内存中的对象,但指针本身仍然存在,并且将具有操作系统的默认指针大小

有关指针大小,请参见


最后一个问题,视情况而定。通过使这个类成为泛型类,您试图实现什么?我建议对此单独问一个问题。

创建时这两个类的内存使用情况有所不同。正如您所指出的,
myObjectA
将有未分配的变量,而
myObjectB
将为这些变量分配数组

一旦将对象分配给
myObjectA
中的变量,指针将设置为这些对象,内存使用将由这些数组的大小决定。假设您打算将它们完全像在
myObjectB
中一样创建为float[2],那么
myObjectA
myObjectB
将使用相同的内存量

至于未赋值变量的大小,虽然指针不会指向内存中的对象,但指针本身仍然存在,并且将具有操作系统的默认指针大小

有关指针大小,请参见

最后一个问题,视情况而定。通过使这个类成为泛型类,您试图实现什么?我建议就此单独提问

    public class itemA
    {
        Color color = Color.FromArgb(255,0,0); //3byte 
    }
    itemA myItem = new itemA();

    public class myObjectA
    {
        float[] pos; // ?byte
        float[] velocity; // ?byte
        itemA item; // ?byte
    }
    myObjectA myObject0 = new myObjectA();

    public class myObjectB
    {
        float[] pos = new float[2]; // 8byte
        float[] velocity = new float[2];// 8byte
        itemA item; //?byte
    }
    myObjectB myObject1 = new myObjectB();