我定义了一个结构体
struct TMsgTitle
{
public Byte Version ;
public Byte Command;
public UInt32 DataLen;
}
按理来说长度应该是6呀,为啥用Marshal.SizeOf得到的是8,哪位大虾知道啥原因,俺刚刚接触c#,谢谢了!
struct TMsgTitle
{
public Byte Version ;
public Byte Command;
public UInt32 DataLen;
}
按理来说长度应该是6呀,为啥用Marshal.SizeOf得到的是8,哪位大虾知道啥原因,俺刚刚接触c#,谢谢了!
解决方案 »
- winform treeview的checkbox点击偶尔失灵
- 高分求算法
- 求助code smith 中用C#,ADO.net,做地WINFORM 模板.
- Panel控件绘制边框的问题。
- 请教各位C/S模式连接数据库的问题
- c#中怎样将一个类中 怎样声明 一个变量的引用,还有怎样将在构造函数参数中传入这个引用并赋值?给个例子
- winform datagrid的问题,两个datagrid主从表的绑定,主表中增加新记录,此时从表中也增加新记录,此时增样保存?
- 如何获取Remoting的客户端IP??
- .net WinForm frmTest.Show()的奇怪现象?
- 没人帮我吗呜呜,到底怎么才能将一个上下文菜单和一个listview里的item联系?
- 问个简单问题,关于变量名
- C#后台取JS中的数组值
如果对齐的边界是4个字节,那么Marshal.SizeOf就得出了8。要控制准确的结构布局可以用StructLayout特性,其中Pack=1设定对齐的粒度为一个字节,这时,Marshal.SizeOf就是8了。 [StructLayout( LayoutKind.Sequential, Pack=1)]
struct TMsgTitle
{
public Byte Version;
public Byte Command;
public UInt32 DataLen;
}
public Byte Command;
只有2位 系统会自动补2个 0x00 0x00
public UInt32 DataLen;
要控制准确的结构布局可以用StructLayout特性,其中Pack=1设定对齐的粒度为一个字节,这时,Marshal.SizeOf就是6了。
...
Console.WriteLine(sizeof(Byte));
Console.WriteLine(sizeof(UInt32));
1
4
请按任意键继续. . .貌似用到了内存对齐
类对象在内存中存放的方式和结构体类似,这里就不再说明。需要指出的是,类对象的大小只是包括类中非静态成员变量所占的空间,如果有虚函数,那么再另外增加一个指针所占的空间即可。
C#中对结构体sizeof或Marshal.SizeOf返回的字节大小问题!!
新手问:内存对齐方式