DaB*_*ain 12 c++ language-agnostic optimization
关于这个问题的评论可以使用C++ 11来auto提高性能吗?获得了很多选票,并暗示"让它不太可能无意中感到悲观"作为答案.我以前从未注意过这个词.我想这与优化相反.
任何人都可以给出更详细的定义吗?在编程环境中它意味着什么?如何使代码看起来像悲观?
Mat*_*son 12
这主要是言语,悲观主义者是乐观主义者的对立面.而悲观的是编写的代码不是最优的.
编译器和程序员都可以通过使用不良构造来减少代码,例如在不需要时复制东西.该auto关键字将至少是确保您获得了"最接近的类型",所以没有(不必要的)类型转换.
请注意,当代码没有"不是最佳"的优点时,悲观情绪就是:
这并不是悲观的"如果我们花了六个月的时间来优化它,它的运行速度会提高0.5%".除非要求加快0.5%,否则花费六个月的时间可能是浪费时间.
此外,所需的功能,例如安全性,并不是悲观的:"代码比它可能更慢,因为我们使其安全".
调试构建是mot"pessimal",因为它有断言来捕获NULL指针解引用并检查数组访问的索引等.只要这些断言和检查被写入,使得它们在启用释放模式时"消失".[如果您的代码运行的是核电站,您可能不希望崩溃,请参阅上面的"安全性"]
我见过的一个老例子就是这个C字符串循环:
char str [large_number] = "... several kilobytes of text (read from file) ... ";
for(char *p = str; p < str+strlen(str); p++)
{
... do stuff with p ...
}
Run Code Online (Sandbox Code Playgroud)
如果do stuff with p足够复杂,编译器将不会意识到这strlen是一个常量值,并将执行strlen循环的每次迭代.如果我们这样做,循环将运行得更快:
for(char *p = str, *e = str+strlen(str); p < e; p++)
{
... do stuff with p ...
}
Run Code Online (Sandbox Code Playgroud)
[不是一个例子auto,我害怕]
悲观意味着不仅仅是提供不是最好的表现.
一般来说,它正在做一些事情,通常是为了提高性能,实际上会伤害性能.虽然不是绝对必要的,但通常暗示结果实际上比你刚刚做了一些简单而明显的事情更糟糕.
在这种情况下,使用auto指定变量的类型很简单明了 - 无论它是否精确最优,它都建立了基线性能水平.当/如果你明确指定了类型,你基本上只有两个选择:显式定义相同的类型auto将推断(获得完全相同的性能),或指定其他类型(在这种情况下,实际上只有两种可能性:它根本不起作用,或者它会进行某种几乎不可避免地损害性能的转换).
总结:悲观化通常不仅仅是"降低最佳性能".通常"做额外的工作(可能希望提高性能)实际上会伤害到性能."