jerry0715 发表于 2008-1-27 15:09:05

关于ACE_OutputCDR 的一点疑惑

在看C++NP 1的时候 在ppt的72页有如下代码:

14
ACE_OutputCDR header (ACE_CDR::MAX_ALIGNMENT + 8);
15
header << ACE_OutputCDR::from_boolean (ACE_CDR_BYTE_ORDER);
16
header << ACE_CDR::ULong (length);
17
18
iovec iov;
19
iov.iov_base = header.begin ()->rd_ptr ();
20
iov.iov_len
= 8;

ACE_CDR::MAX_ALIGNMENT 的define的值是8,但是第二十行的地方iov.iov_len
= 8;
当然用 header.total_length ()来赋值结果也是8,我想问的是这个值一般不会加上吗,在什么情况下起作用

peakzhang 发表于 2008-1-27 17:26:29

赋值是必要的,否则调用会有问题

jerry0715 发表于 2008-1-27 22:29:46

我想是否跟边界对齐有关,比如
ACE_OutputCDR header (ACE_CDR::MAX_ALIGNMENT + 8); 那么在iov.iov_len= 8;可以这么写
但是如果 ACE_OutputCDR header (ACE_CDR::MAX_ALIGNMENT + 5);之类的话,是不是iov.iov_len = header.total_length ()这么写了,而不能赋值成5,对吧

csfreebird 发表于 2008-9-26 23:46:53

我的理解是ACE_CDR::MAX_ALIGNMENT代表的字节空间并不用于网络传输,是ACE内部边界对齐需要的,所以
iov.iov_len = header.total_length ()这么写就可以了
以前我专门计算每个对象序列化应该占多少字节,其实也是不必要的,因为ACE_OutputCDR会根据你写入的数据调整流的大小。

newzai 发表于 2008-11-29 22:05:01

主要是对其方面的吧。
http://blog.csdn.net/chenxiaohong3905/archive/2008/11/27/3392148.aspx
页: [1]
查看完整版本: 关于ACE_OutputCDR 的一点疑惑