找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3324|回复: 0

ACE_CDR的问题

[复制链接]
发表于 2008-4-20 13:34:12 | 显示全部楼层 |阅读模式
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的操作,内部进行了内存复制,在某些场合是应该避免的。
      继续研究,如果有新的发现会继续发帖。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2025-2-23 21:12 , Processed in 0.019917 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表