依赖工程的关字节对齐问题

17 篇文章 0 订阅
16 篇文章 0 订阅

最近由于项目的字节对齐导致了2次比较诡异的内存问题。这里进行一次总结,首先描述一下第一次的现象。


我们项目的网络是使用IOCP做的,是一个包含IOCP封装和本地数据结构与网络字节流的序列化和反序列化的一个库。作为一个lib客户端和服务器共用的。一次客户端的开发发现协议内容解析一直不正确,跟踪调试发现同一个结构体大小一下子20,一下子24。然后仔细一看,在lib里面是24,在客户端代码里面就是20。最后我们就得出结论是lib和客户端工程对齐方式不一致的问题导致的。lib工程的Struct Member Alignment使用的是default(/Zp8),而客户端工程使用的是/Zp4。


第一个案例还比较好发现,第二个案例就完全是猜测了。
我们服务器使用luabind+c++实现了自动发包工具,原来只要在lua脚本里面生成一个协议包就直接发出去了,现在却发现一发包就崩在luabind的member赋值过程中了。根本无法完全确定原因。不过第一个案例就在最近,我才猜了一下,可能luabind工程对齐方式跟我们的网络lib对齐方式不同导致的。结果对了。不然这个问题的解决肯定是遥遥无期了。


总结:依赖工程之间对齐方式不同,共用了结构体,那肯定导致问题的。问题包括数据不对,结构体多种size,程序崩溃。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值