日期:2014-05-20  浏览次数:20956 次

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