关于sizeof(struct)的基础问题
struct Struct1 { }
struct Struct2 { long l;}
struct Struct3 { byte b;}
struct Struct4 { long l; byte b;}
unsafe static void Main(string[] args)
{
Console.WriteLine(sizeof(Struct1) + "、 " + sizeof(Struct2) + "、 " + sizeof(Struct3) + "、 " + sizeof(Struct4));
Console.ReadLine();
}
结果是:1、8、1、16
Struct1是空的,sizeof(Struct1)为什么不是0?
如果struct本身占1字节那么Struct2为什么不是1+8=9?
如果如Struct2、Struct3所示,struct占用字节数只取决于其中的字段,为什么Struct4不是8+1=9?
------解决方案--------------------看看这个,对你应该有帮助...
http://community.csdn.net/Expert/topic/5293/5293764.xml?temp=.3144342
------解决方案--------------------sizeof 运算符仅适用于值类型,对于所有其他类型(包括 struct),sizeof 运算符只能在不安全代码块中使用。
------解决方案--------------------学习,常常说的穿透?
------解决方案--------------------对齐了。
给结构加上这个属性就行了:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
------解决方案--------------------用Marshal.SizeOf试
------解决方案--------------------和C++一样,存在对齐问题。当然,按照楼上说的设置属性可以调整对齐的结果。