ACE/TAO length()函数花费了太多时间。因为它在设置长度时使用新运算符创建了大量的内存。任何人都知道只需在TAO中设置长度函数就可以替代length函数。
谢谢,
发布于 2015-01-29 18:47:27
来自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序列没有为您提供此功能,因此如果您反复调整大小,您将看到性能不佳,因为每次调整大小时,您将不得不为新缓冲区的分配和将所有现存元素复制到新的基础缓冲区的时间付出代价。
https://stackoverflow.com/questions/28201802
复制相似问题