ACE_CDR的问题
ACE_CDR的问题ACE_CDR配合ACE_Message_Block,可以进行结构的存储和分析工作,如自定义的网络协议,可以用于散集和列集。
但我使用这套机制,发现有些问题,主要是对齐引起的。使用对齐操作无效,align_write_ptr
传输数据的时候,总是内存内容错误,平白无故的多出一些字节。跟踪发现,ACE_CDR进行了8字节地址对齐,会自动的进行调整,所以有些数据就是错误的。
想到的解决办法是:
1、ACE_OutputCDR操作,不要使用write_short、write_long这些操作,使用write_char_array(&short_data,sizeof(short_data)这种策略,按字节写入,操作是正常的。
2、直接使用ACE_Message_Block的copy功能。也可以达到效果。
3、编译ACE时候,增加宏定义ACE_LACKS_CDR_ALIGNMENT,尚未测试是否有效。
ACE_CDR系列,还有一个问题就是,它对ACE_Message_Block的操作,内部进行了内存复制,在某些场合是应该避免的。
继续研究,如果有新的发现会继续发帖。
页:
[1]