关于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++一样,存在对齐问题。当然,按照楼上说的设置属性可以调整对齐的结果。