编译器之WIN64预定义宏和数据对齐设置对结构体大小的影响

编译器之WIN64预定义宏和数据对齐设置对结构体大小的影响

Reference:

关于VC预定义常量_WIN32,WIN32,_WIN64

1.WIN64

为了增加代码的可移植性,通常都会利用预定义宏WIN64来设置变量的数据位数。

VS预处理器定义

2.数据对齐设置

编译器的数据对齐方式也是可以配置的,64位下VS默认的对齐设置是8Byte。

VS结构成员对齐

3.重点

其实通常情况下我们不用理会这些设置。不过,在使用到第三方编译好的库的时候就需要特别留意啦。通常这些不经意的设置很可能导致对结构体的使用出现错误。例如别人编译过的库是4字节对齐的,而你的项目却使用8字节对齐,这样,在你用别人提供的头文件中定义的结构体时就会出现问题。为什么呢?因为你的编译器是按8字节对齐的方式来解释这个结构体的。当然,如果只是在自己写的源代码中使用这个结构体自然是不存在问题的,但你之所以要用这个第三方编译好的库是因为你想要调用它提供的函数来完成一定的任务,这里就有问题了。第三方编译好的库既然已经编译好了,那么其二进制代码中对这个结构体各个成员的偏移量也就确定了,而这个偏移量是编译器基于它被编译时的设置所确定下来的,是4字节对齐的。而你的工程是8字节对齐的,如此,在库的内部对从你的代码中传入的结构体的使用就会对应不上。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值