1

ACE/TAO length() 函数花费了太多时间。因为它在设置长度时使用 new 运算符创建了这么多内存。任何人都知道仅在 TAO 中设置长度的替代长度功能。

谢谢,

4

1 回答 1

1

来自 ATCD 邮件列表中的 Will Otte:我猜你有这样的代码:

while (something) {
    CORBA::ULong pos = seq.length ();
    seq.length (pos+1);
    seq[pos] = some_value;
}

并观察到与

std::vector<foo> vec;
while (something) {
    size_t pos = vec.size ();
    vec.resize (pos + 1);
    vec[pos] = foo (bar);  // or the much more succinct vec.push_back (foo (bar));
}

正确的?

答案很可能是因为您的 STL 实现正在帮助您,并在您使用调整大小时提供几何增长。C++ 标准没有任何类似的要求(对于调整大小;push_back 保证几何增长),所以你可能很幸运,不应该依赖这种行为。

TAO 序列不为您提供此功能,因此如果您反复调整大小,您将看到性能不佳,因为每次调整大小时,您都必须为分配新缓冲区和复制时间付费新底层缓冲区的所有现有元素。

于 2015-01-29T18:47:27.240 回答