关于ACE_CDR的简单问题
C++ NP1和C++ NP2书上提到:mb_align一般在使用ACE_InputCDR前都会使用mb_align对齐内存,
但是在使用ACE_OutputCDR时却看不到使用,
是不是不需要调用,为什么? 我说说我的理解,说实话我对ACE_CDR的对齐特性了解的也不是很多,所以理解的未必准确,大家讨论吧。
在使用ACE_InputCDR的时候调用mb_align,理由很简单,是你自己创建的缓冲区和数据流,当然需要对齐才好编码和对方解码。
而使用ACE_OutputCDR的时候,不用mb_align调整缓冲区,因为系统默认对方传来的数据流是对齐过的,就是说和上面的ACE_InputCDR对应了。
当然,每个类内部,其实还是可以调整对齐的。
不过我自己在工程中,一直少用CDR系列的类,因为对齐老是造成编解码错误,尤其是自定义的应用协议。
后来发现,可以在宏定义中去除这个对齐功能,重新编译ACE就好了。
页:
[1]