是否可以在.NET中使用不安全的代码来实现高效的固定大小数组?

Mar*_*ark 9 c# arrays unsafe

有没有一种在.NET中实现固定大小数组的方法,不需要不安全的代码?

我的目标是创建一个表示固定大小数组的值类型,该数组可以嵌入(作为成员包含在其他类型中) - 即我特别希望避免创建一个数组作为声明它的类型的单独对象.

我意识到.NET的数组实现非常出色并且在CLR/CIL级别得到支持 - 并且真的不想讨论是否只使用数组......这里的探索是否是一个安全的,固定大小的,价值类型的实现是可能的,效率几乎一样好.

Rob*_*vey 5

目标是能够使用固定大小的值类型数组,该数组可以用作其他类型的私有成员.考虑自定义字典或链表实现...... 如果每个存储桶/节点被展平以包含它自己的固定大小数组,则可以减少堆分配的数量.

使数组成为值类型并不一定意味着它将存储在堆栈中.实际上,如果它是嵌入在引用类型中的值类型,则它很可能将使用引用类型存储在堆上,而不是存储在堆栈中.

因此,将其作为值类型将不会减少堆分配.

更多信息:http://blogs.msdn.com/b/ericlippert/archive/2010/09/30/the-truth-about-value-types.aspx

  • 这个问题背后的理念是专门针对将结构体嵌入到类中并使用类在堆上分配结构.如果实现为私有成员并正确使用,则不应多次复制. (2认同)