对于循环C++可能效率低下
Potentially Inefficient For Loop C++
我注意到了以下内容,并认为它效率低下。我错过了什么?我想一定有我不知道的速度优势。对于上下文,这是经纪公司 API 中的生产代码。
我看到了什么:
const unsigned MAX_ATTEMPTS = 50;
unsigned attempt = 0;
for (;;) {
++attempt;
// logic, functions, output
if( attempt >= MAX_ATTEMPTS) {
break;
}
}
我所期望的:
const unsigned MAX_ATTEMPTS = 50;
for(unsigned attempt = 0; attempt < MAX_ATTEMPTS; ++attempt){
// logic, functions, output
}
更正了拼写错误
我注意到以下内容并认为它效率低下。我错过了什么?
除非你知道,否则推测效率是没有意义的
- 是否存在可测量的问题
- 目前需要多长时间
- 需要多长时间
- 改进需要多少努力
因此,如果这个循环不是速度关键并且由logic, functions, output
主导 - 为避免疑问,除非他们的输出效率比其他任何人都高几个数量级- 那么首先没有问题,你的猜测不太可能是有成效的。
如果这个循环在某种程度上对速度至关重要(我再次强调这不太可能(,那么你需要测量它- 你需要决定什么结果是可以接受的。否则,你只是浪费时间重新安排躺椅,而不是做任何有价值的事情。
最后,如果你通过测试零到两个(包括两个(,你仍然需要判断任何改进是否值得实施、测试、审查和部署它所需的努力。如果结果比步骤 2 中决定的最佳延迟低 1%,并且代码库的其他部分目前正在烧钱,那么这仍然不太可能是重中之重。
然而,从学习而不是商业的角度来看 - 发现这样的潜在低效率是很好的。这不是因为它们很重要,而是因为你可能错了,学习如何对它们进行基准测试的过程 - 以及理解你为什么错了 - 是很好的经验,并将提高你下次的直觉。
唯一的区别是原始代码:
- 您可以在循环后访问
attempt
的最后一个值 - 循环将至少执行一次。
它没有提供明显的好处。如果你问我,原始代码非常丑陋。我会这样做:
unsigned attempt = 1;
do {
// Logic
} while(++attempt <= MAX_ATTEMPTS);
其中一个有可能被编译成更快的代码。为了找出答案,您需要对其进行基准测试。哪一个更快(如果有的话(可能因系统而异。
我认为你削减得太多了,我想是这样的。
for (;;) {
++attempt;
// logic, functions, output
result = somefunc();
if(result == SUCCESS) break;
if( attempt >= MAX_ATTEMPTS) {
break;
}
}
我不喜欢代码中的无数中断。我更喜欢:
do {
// Logic
result = somefunc();
} while(result != SUCCESS && attempt++ < MAX_ATTEMPTS);
如果我是对的,你的版本应该看起来像这样
result = FAILURE;
for(unsigned attempt = 1; result != SUCCESS && attempt <= MAX_ATTEMPTS; ++attempt){
result = somefunc();
// logic, functions, output
}
这些版本之间的性能不会有任何差异。这是个人喜好的问题
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 代码的效率. 转到和函数调用
- 对于循环C++可能效率低下
- 内存效率表示最短路径的方法?
- 如何提高该函数的运行效率?
- 效率:标准::数组与标准::矢量
- 如何提高BST的搜索操作效率?
- 字符串引用参数的效率C++
- 提高基于组件的游戏引擎的效率
- 在 c++ 中使用带有映射的插入效率
- 关于效率的问题
- 在SQLITE数据库中写入记录需要花费大量时间.如何提高刀片操作效率?
- 寻求提高Microsoft密封库计算效率的方法
- 做对了一个类似竞争的问题,但需要帮助来提高效率
- C++ - 与 Numpy 中的矢量版本相比,Argsort 效率低的矢量版本实现
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- visual C++|循环效率
- 我创建了一个库,想知道设计是否效率低下
- 矩阵rowSums()与colSums(()在R与Rcpp与Armadillo中的效率
- 共享指针的复制和交换效率