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

前端之家收集整理的这篇文章主要介绍了依赖工程的关字节对齐问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近由于项目的字节对齐导致了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,程序崩溃。 原文链接:https://www.f2er.com/javaschema/286469.html

猜你在找的设计模式相关文章