java字节对齐 32 64_32位和64位系统,数据类型字节数和结构体对齐区别

程序的结构体对齐字节数由编译选项参数来控制。

默认情况下,32位器为4字节对齐;64位机器为8字节对齐;

`-malign-double'

`-mno-align-double'

Control whether GCC aligns `double', `long double', and `long

long' variables on a two word boundary or a one word boundary.

Aligning `double' variables on a two word boundary will produce

code that runs somewhat faster on a `Pentium' at the expense of

more memory.

On x86-64, `-malign-double' is enabled by default.

32位系统中,结构体内成员地址分配时,编译器默认考虑4字节对齐;

64位系统中, 编译器默认考虑8字节对齐。

对于内部临时需要更改的结构体对齐方式,可通过如下方式:

一般地,可以通过下面的方法来改变缺省的对界条件:

· 使用伪指令#pragma pack (n),编译器将按照n 个字节对齐;

· 使用伪指令#pragma pack (),取消自定义字节对齐方式。

注意:如果#pragma pack (n)中指定的n 大于结构体中最大成员的size,则其不起作用,结构体

仍然按照size 最大的成员进行对界。

最好是这么做:

#pragma pack(push)      #保存当前的对齐方式

#pragma pack(1)        #设置对齐方式为1字节对齐

struct test

{

......

};

#pragma pack(pop)      #恢复之前的对齐方式

Linux系统32位与64位数据类型长度比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值