据说C#结构对轻量级数据对象的类有一些性能优势,因为它们完全存储在堆栈上而不是分配堆内存。
如果该结构的一个成员是int []或结构数组,那么它对分配有什么影响,以及我可能从中获得的任何其他性能优势?
示例:
struct A
{
int foo;
int bar;
}
struct B
{
int[] foos;
A[] bars;
}
struct A在性能,内存使用等方面与struct B有何不同?
答案 0 :(得分:2)
由于大小不是类型的一部分,因此必须动态分配数组。所以你的struct只包含一个指向数组的指针。
struct本身是堆栈分配*但数组内容仍然在堆上。
*一般。在某些情况下,值类型是堆分配的,例如是匿名方法中使用的外部变量。当然,如果它是堆分配的对象的一部分,则结构在堆上内联分配。可能还有一些其他的角落案例,但这并不重要。
答案 1 :(得分:0)
结构中的数组不会破坏结构的堆栈与堆分配的性能优势。如果你真的有一个好处;)。在创建数组实例时,结构中的数组将在堆上分配。