读书人

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

发布时间: 2012-02-14 19:19:19 作者: rapoo

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

读书人网 >C#

热点推荐