C#数组是否保证按顺序存储在内存中?

zrb*_*ker 3 .net c#

根据互联网上的许多消息来源,C#数组是按顺序存储的.也就是说,如果我有一个指向数组中第一个元素的指针int *start = &array[0],那么我可以array[i]通过执行来访问*(start + i).

但是,我正在查看存储在其中的C#语言规范,C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC#\Specifications\1033我找不到任何可以保证这种情况的地方.

在实践中,这可能不是一个问题,如果说微软和Mono保持他们的实现同步,但我想知道是否有一个官方来源保证数组按顺序存储在内存中.

谢谢!

Dav*_*ers 5

根据ECR的CLR规范:

I.8.9.1数组类型

....

数组元素应按行主要顺序排列在数组对象中(即,与最右边的数组维度相关的元素应从最低到最高的索引连续排列).为每个数组元素分配的实际存储可以包括特定于平台的填充.(当应用于该数组元素的类型时,sizeof指令会返回此存储的大小(以字节为单位).)

因此,在一个阵列中的ECMA-335公共语言基础结构元素的补充实现中,将依次布局.

但是可能会应用特定于平台的填充,因此64位平台上的实现可能会选择为每个Int32分配64位.