如果一个数组被用作struct(C#)中的一个元素,它在哪里存储?

我们尽可能在C#中使用struct,主要是因为它存储在堆栈中,并且没有为它创建对象。 这提高了性能。

另一方面,数组存储在堆上。

我的问题是,如果我包含一个数组作为结构的一个元素,如下所示:

struct MotionVector
{
    int[] a;
    int b;
}

那会有什么后果。 该数组将被存储在堆栈上吗? 或者使用struct的性能优势会丢失?


如果您不想动态创建元素,请考虑在启动过程中创建MotionVector实例的(大)缓冲区,并在需要时重新使用这些元素。 那么你将不会受到以动态方式创建/破坏它们的惩罚。

当然,你必须编写一些小函数来获得一个'自由'实例并获得一个,在结构中使用布尔值(或通过使用接口)。

要做到这一点,你可以例如:

在您的应用初始化期间创建动作向量:

MotionVectors motionVectors;

向MotionVector类添加布尔值:

public class MotionVector
{
    bool InUse { get; set; }

    public MotionVector() 
    {
        InUse = false; 
    }
}

定义新类MotionVectors:

class MotionVectors
{
    MotionVector _instances[100];

    public void Free(MotionVector vector)
    {
        var index = 'search vector in _instances' 
        _instances[index].Inuse = false;
    }

    public MotionVector GetNewInstance()
    {
        var index = 'first free vector in _instances'
        _instances[index].Inuse = true;
        return _instances[index];
    }
}

只有指向数组的指针才会存储在堆栈中。 实际的数组将被存储在堆中。


int[] a是一个引用类型,即它引用一个整数数组。 '参考'本身将被存储在堆栈中。 然而,当你做这样的事情时,它引用的数据将被存储在堆上:

MotionVector z;
z.a = new int[10];
链接地址: http://www.djcxy.com/p/78895.html

上一篇: If an array is used as an element in struct (C#) , where is it stored?

下一篇: When are value types stored in stack(C#)?