【发布时间】:2021-09-09 01:35:30
【问题描述】:
假设我有一个函数:
void someFunc(void) {
std::vector<std::string> contentVector;
// here are some operations on the vector
}
函数被多次调用。分析器显示 std::__u::vector::vector 和 std::__u::vector::~vector 的 CPU 使用率百分比很高。
在函数外部创建向量并在函数开头调用.clear() 有意义吗?
其他标准容器也有同样的问题。
【问题讨论】:
-
除非你保证没有并发调用。如果有并发调用,在函数外部提升变量将是一场灾难。即使没有。一旦并发性被引入这个系统,它可能是一场灾难。所以我的建议是把局部变量留在本地。
-
添加一些关于
contentVector的大小、用例和内容的上下文可能会有所帮助。例如:contentVector的大小顺序contentVector是否在多个调用中保持相同的内容?..等 -
"对于其他标准容器也有同样的问题。" 这些问题非常不同,答案也非常不同。
-
听起来这里的最终仲裁者将是“分析器对更改后的性能有何看法?”
-
如果你用这个数组在函数中做一些真实的事情,就不应该是这种情况。检查您是否不在 Debug 配置中;它可能会导致此类事情的额外费用。如果问题仍然存在,请显示整个功能代码。还有……在这种情况下,你的“高百分比”是多少?
标签: c++ containers std