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