如果一个数组被用作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?