Tag: 内存对齐

对.NET中未对齐字段的读写是绝对primefaces的吗?

C#规范( ECMA-334和ISO / IEC 23270 )有一段关于读写的primefaces性: 12.5变量引用的primefaces性 以下数据类型的读取和写入应为primefaces:bool,char,byte,sbyte,short,ushort,uint,int,float和reference类型。 此外,在前一个列表中具有基础类型的枚举类型的读取和写入也应该是primefaces的。 其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,不必是primefaces的。 但我很难想象永远是真的。 例如,我可以使用StructLayout属性布局结构,并强制字段不对齐: // sizeof(MyStruct) == 9 [StructLayout(LayoutKind.Sequential, Pack = 1)] struct MyStruct { public byte pad; // Offset: 0 public int value1; // Offset: 1 public int value2; // Offset: 5 } 现在,当我这样做时,我认为对int的写入不是primefaces的,因为它没有与自然边界对齐: MyStruct myStruct = new MyStruct(); myStruct.value1 = 20; 那么,它是绝对primefaces的(就像规范所说的那样),还是不能保证是primefaces的(例如在x86上)? 无论哪种方式,你有任何来源支持这一点吗?