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

来源:互联网 发布:xp系统网络连接错误691 编辑:程序博客网 时间:2024/05/17 06:39

最近由于项目的字节对齐导致了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,程序崩溃。
原创粉丝点击