|
1
3
尽管它并不是真正用于此目的,有时可能会给出稍微不同的答案(因为它是从编组的角度考虑问题,而不是从CLR内部结构的角度考虑问题), Marhsal.SizeOf 可以给予 一 回答:
|
|
2
2
JIT编译器的工作实际上是分配类和结构的内存布局。实际的布局在任何方面都是不可发现的(除了查看生成的机器代码),需要一个[StructLayout]属性将对象封送到一个已知的布局。JIT通过对字段重新排序来利用这一点,以保持字段对齐并最小化分配大小。 在您引用的结构中不会有任何意外,这些字段已经在任何可以执行托管代码的当前CPU体系结构上对齐。值类型的大小由CLI保证,一个short总是需要16位。你的结构需要32位。 |
|
|
3
1
CLR在某种程度上会打包相同大小的成员。它确实打包了数组,我希望您的示例结构在任何平台上都会占用4个字节。 具体打包哪些类型以及打包方式取决于CLR实现和当前平台。规则没有严格定义,因此CLR可以自由地重新排列成员,以最有效的方式存储它们。 |