什么是悲观?

What is pessimization?

关于问题 的评论获得了很多票,并建议将“使其不太可能无意中悲观化”作为答案。我以前从来没有注意到这个词。我想这在某种程度上与优化相反。

谁能给出更详细的定义? 它在编程上下文中意味着什么?悲观的代码会是什么样子?

你可以查字典,比如 this page,它说:

pessimize (verb):

(transitive) To make (something) less efficient, such as a computer program.

这主要是文字游戏,悲观主义者与乐观主义者相反。悲观主义写的代码不是最优的。

编译器和程序员都可以通过错误的结构来悲观代码,例如在不需要时复制内容。 auto 关键字将至少确保您获得 "closest type",因此没有(不必要的)类型转换。

请注意,悲观化是指代码为 "not optimal":

没有任何好处

不是悲观"if we spent six months optimising this, it would run 0.5% faster"。除非要求快 0.5%,否则花六个月时间可能是浪费时间。

此外,所需的功能(例如安全性)并不悲观:"The code is slower than it possibly could be because we made it secure"。

调试版本是 mot "pessimal" 因为它有断言来捕获 NULL 指针取消引用和检查数组访问的索引等。只要这些断言和检查被编写成它们"disappear" 当你开启释放模式。 [如果您的代码是 运行 核电站,您可能永远不想崩溃,请参见上面的 "security"]

我见过的一个老例子是这个 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 ... 
}

如果do stuff with p足够复杂,编译器将不会意识到strlen是一个常量值,并且会在循环的每次迭代中执行strlen。如果我们这样做,循环将 运行 快得多:

for(char *p = str, *e = str+strlen(str); p < e; p++)
{
   ... do stuff with p ... 
}

[恐怕不是auto的例子]

悲观化不仅仅意味着表现不是最好的。

一般来说,它正在做一些事情,通常是为了提高性能,但实际上却损害了性能。虽然不是绝对必需的,但通常会暗示结果实际上比你只做一些简单而明显的事情更糟糕。

在这种情况下,使用 auto 指定变量的类型简单明了——无论它是否恰好是最优的,它都建立了性能的基线水平。 When/if 显式指定类型,基本上只有两种选择:显式定义 auto 会推导出的相同类型(获得完全相同的性能),或指定其他类型(在这种情况下实际上只有两种可能性:它根本不起作用,或者它会进行某种几乎不可避免地会损害性能的转换。

总结:悲观通常不只是"getting less that optimal performance"。通常是 "doing extra work (possibly in the hope of improving performance) that actually hurts performance."