3

据推测,C# 结构相对于轻量级数据对象的类具有一些性能优势,因为它们完全存储在堆栈上,而不是分配堆内存。

如果该结构的成员之一是 int[] 或结构数组,那么这对分配有什么影响以及我可能从中获得的任何其他性能优势?

例子:

struct A
{
    int foo;
    int bar;
}

struct B
{
   int[] foos;
   A[] bars;
}

struct A 在性能、内存使用等方面与 struct B 有何不同?

4

2 回答 2

2

由于大小不是类型的一部分,因此必须动态分配数组。所以你的结构只包含一个指向数组的指针。

结构本身是堆栈分配的*,但数组内容仍在堆上。

*通常。在某些情况下,值类型是堆分配的,例如作为匿名方法中使用的外部变量。当然,如果它是堆分配的对象的一部分,则结构会在堆上内联分配。可能还有其他一些极端情况,但这并不重要。

于 2012-06-27T01:38:55.497 回答
0

结构中的数组不会破坏结构的堆栈与堆分配带来的性能优势。如果你真的有好处;)。创建数组实例时,结构中的数组将在堆上分配。

于 2012-09-21T15:29:44.287 回答