首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于sizeof(struct)的基础有关问题

2012-02-14 
关于sizeof(struct)的基础问题structStruct1{}structStruct2{longl}structStruct3{byteb}structStruct4{

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

热点排行