#pragram pack(0) pack(1) pack(2) pack(4) StructLayoutAttribute ::Pack 字段

StructLayoutAttribute ::Pack 字段

控制类或结构的数据字段在内存中的对齐方式。

命名空间:   System.Runtime.InteropServices
程序集:   mscorlib(在 mscorlib.dll 中)
语法
VB
C#
C++
F#
JScript
public:
int Pack
备注

此字段指示在指定 LayoutKind ::Sequential 值时应使用的内存边界。

Pack 的值必须介于 0、1、2、4、8、16、32、64 或 128:

  • 值为 0 则指示封装对齐方式设置为当前平台的默认值。

  • 1 值表示字节边界上发生的数据对齐。封装值为 1 的字段之间无间隙。

  • 封装值 2 和更高的值将导致字节上要对齐的每个字段相对于结构的开头进行偏置。因此,数据字段将在偏移量上开始,偏移量是请求的封装值的倍数。

下面的示例包含一个带有三个单字节字段的结构:

struct MyStruct
{
byte B0;
byte B1;
byte B2;
}

不管封装值如何,字节 B0 始终从偏移量为 0(0 字节)处开始。

封装值 0 将产生以下结果:

  • B0 将在偏移量为 0(字节 0)处开始。

  • B1 将在偏移量为 1(字节 1)处开始。

  • B2 将在偏移量为 2(字节 2)处开始。

请注意默认平台的对齐方式将总是连续打包相同类型。

封装值 1 将产生以下结果:

  • B0 仍将在偏移量为 0(字节 0)处开始。

  • B1 仍将在偏移量为 1(字节 1)处开始。

  • B2 仍将在偏移量为 2(字节 2)处开始。

但是,封装值 2 将产生以下结果:

  • B0 仍将在偏移量为 0(字节 0)处开始。

  • B1 将在偏移量为 2(字节 2)处开始。

  • B2 将在偏移量为 4(字节 4)处开始。

同样,n 的一个封装值将产生以下结果:

  • B0 仍将在偏移量为 0(字节 0)处开始。

  • B1 将在偏移量为 n(字节 n)处开始。

  • B2 将在偏移量为 n*2(字节 2n)处开始。

在磁盘和网络写操作过程中导出结构时,经常使用 Pack 字段。 在平台调用和互操作的操作过程中也经常使用该字段。

偶尔,字段用于通过产生更紧密的封装大小来降低内存要求。但是,此使用情况需要仔细考虑实际的硬件约束,实际上可能降低性能。

平台

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见 .NET Framework 系统要求
版本信息
.NET Framework
受以下版本支持:4、3.5、3.0、2.0、1.1、1.0
.NET Framework Client Profile
受以下版本支持:4
请参见
参考
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值