相关疑难解决方法(0)

std :: vector与std :: list与std :: slist的相对表现?

对于一个简单的链表,其中不需要随机访问列表元素,是否有任何显着的优势(性能或其他)使用std::list而不是std::vector?如果需要向后遍历,那么在迭代其元素之前使用std::slistreverse()列表会更有效吗?

c++ performance stl linked-list data-structures

49
推荐指数
3
解决办法
7万
查看次数

人们可以使用分析器,但为什么不停止程序呢?

如果某个东西正在使单线程程序占用,比如10倍,那么就可以在其上运行一个分析器.您也可以通过"暂停"按钮暂停它,您将看到它正在做什么.

即使它比它应该慢了10%,如果你停止它多次,不久你会看到它反复做不必要的事情.通常问题是在堆栈中间某处不是真正需要的函数调用.这不能衡量问题,但确实找到了.

编辑:反对意见主要假设您只采取1个样本.如果你是认真的,请采取10.任何一行代码,导致一定比例的浪费,如40%,将平均出现在该部分样本的堆栈上.瓶颈(单线程代码)无法隐藏它.

编辑:为了表明我的意思,许多反对意见的形式是"没有足够的样本,所以你看到的可能完全是虚假的" - 关于机会的模糊观点.但是,如果任何可识别的描述,不仅仅是在常规或常规活动中,在30%的时间内有效,那么在任何给定样本上看到它的概率是30%.

然后假设只采集了10个样本.在10个样本中看到问题的次数遵循二项分布,并且看到它0次的概率是.028.看到它1次的概率是.121.2次,概率为.233,而3次则为.267,之后下降.由于看到它少于两次的概率是.028 + .121 = .139,这意味着看到它两次或更多次的概率是1 - .139 = .861.一般规则是,如果您看到可以修复两个或更多样本的内容,则值得修复.

在这种情况下,在10个样本中看到它的机会是86%.如果你是14%没有看到它的人,那就去做更多的样品.(如果样本数量增加到20,那么两次或多次观察的几率会增加到99%以上.)所以它没有经过精确测量,但已经准确找到了,重要的是要了解它它可能很容易成为分析器无法实际找到的东西,例如涉及数据状态的东西,而不是程序计数器.

optimization performance profiling

45
推荐指数
12
解决办法
3万
查看次数

如何在密钥类型为std :: string的地图查找中提高性能?

我正在使用std::map(VC++实现),并且通过map的find方法查找速度有点慢.

关键类型是std::string.

我可以std::map通过地图的自定义键比较覆盖来提高此查找的性能吗?例如,std::string< string::size()compare在比较数据之前可能没有考虑简单的比较?

还有其他想法加快比较吗?

在我的情况下,地图将始终包含<15个元素,但是它会被不断地查询并且性能至关重要.也许有一个更好的数据结构,我可以使用更快?

更新:地图包含文件路径.

Update2:地图的元素经常变化.

c++ optimization dictionary stdmap visual-c++

9
推荐指数
3
解决办法
2万
查看次数

什么是std :: safe_string?

我的一个问题答案包括以下代码行:

label = std::safe_string(name); // label is a std::string
Run Code Online (Sandbox Code Playgroud)

意图似乎是字符串文字的包装(因此可能不会发生分配).我从来没有听说过safe_string,显然也没有谷歌(我也不能在98标准中找到它).

有谁知道这是关于什么的?

c++ string

7
推荐指数
2
解决办法
668
查看次数