找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3697|回复: 4

关于ACE_OutputCDR 的一点疑惑

[复制链接]
发表于 2008-1-27 15:09:05 | 显示全部楼层 |阅读模式
在看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[2];

19
iov[0].iov_base = header.begin ()->rd_ptr ();

20
iov[0].iov_len
= 8;


ACE_CDR::MAX_ALIGNMENT 的define的值是8,但是第二十行的地方iov[0].iov_len
= 8;

当然用 header.total_length ()来赋值结果也是8,我想问的是这个值一般不会加上吗,在什么情况下起作用
发表于 2008-1-27 17:26:29 | 显示全部楼层
赋值是必要的,否则调用会有问题
 楼主| 发表于 2008-1-27 22:29:46 | 显示全部楼层
我想是否跟边界对齐有关,比如
ACE_OutputCDR header (ACE_CDR::MAX_ALIGNMENT + 8); 那么在iov[0].iov_len= 8;可以这么写
但是如果 ACE_OutputCDR header (ACE_CDR::MAX_ALIGNMENT + 5);之类的话,是不是iov[0].iov_len = header.total_length ()这么写了,而不能赋值成5,对吧
发表于 2008-9-26 23:46:53 | 显示全部楼层
我的理解是ACE_CDR::MAX_ALIGNMENT代表的字节空间并不用于网络传输,是ACE内部边界对齐需要的,所以
iov[0].iov_len = header.total_length ()这么写就可以了
以前我专门计算每个对象序列化应该占多少字节,其实也是不必要的,因为ACE_OutputCDR会根据你写入的数据调整流的大小。
发表于 2008-11-29 22:05:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-23 09:01 , Processed in 0.017402 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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