Herb Sutter的C编码标准说要避免过早优化
和过早悲观化
。但我觉得两者都在做同样的事情。因此,希望对澄清这两个概念以及它们之间的区别有所帮助。如果你能举出一些例子,对其他人会更有好处。下面是关于过早优化的一个很好的解释。但我找不到过早悲观的原因
在编程时,既有小规模的选择,也有大规模的选择。
悲观是指以“阻止编译器做好工作”的方式编写代码。一个典型的例子是,当函数非常小且简单(例如,a{s,g}etter)时,不要将函数放置在允许它们内联的地方。这可以使函数花费10倍于它应该花费的时间,这是一件非常简单的事情。
我在这个网站上发现过几次的悲观是使用“a/=2;”当“a
过早的优化是当你展开循环或者仅仅因为你不相信编译器能做好而使代码变得更复杂时——通常没有证据表明它不能做好。
另一个例子是“不使用std::vector
”,而是您自己的可扩展数组
,因为“vector太慢”,甚至没有使用std::vector
测试代码。
赫伯的意思是,当你面对两个同样可读的选项时,总是选择最有效的一个。
使用std::vector::reserve()
或最佳标准容器或算法不是过早的优化。然而,不使用它们将是过早的悲观。
过早优化是指为了一些甚至不值得的“优化”而牺牲可读性。使用探查器进行此操作。
我认为,他所说的过早悲观与过早优化恰恰相反:根本不考虑使用哪种数据结构和算法。
过早优化通常涉及算法的细节,这些细节可以在以后很好地调整,不需要在一开始就加以注意。
相比之下,过早的悲观则与代码体系结构的高级设计有关:例如,库的根本效率低下的接口不能通过优化来修复,因为公共接口几乎是一成不变的。
对于某些PDF,我在刷新标记结构时看到一个NPE。这个问题发生在iText 7.0.2-Snapshot中。iText 5.5.10可以很好地处理这些文件。NPE在中抛出,因为映射是空的。该类中的映射只有在调用时才能变为null。 因为的唯一目的是--就我所知--释放内存,所以我测试了当它更改为空方法时会发生什么。结果是文件似乎正常处理。不再有例外。下面是一个示例文件。 输出是什么:
我的nginx配置: 这是nginx或uwsgi的问题,还是两者都有?
请参见下面编辑部分的更新问题 我试图使用GZIPInputStream动态地从Amazon S3解压大型(约300M)GZIPed文件,但它只输出文件的一部分;但是,如果在解压缩之前下载到文件系统,那么GZIPInputStream将解压缩整个文件。 如何让GZIPInputStream解压整个HTTPInputStream,而不仅仅是它的第一部分? 请参见下面编辑部分中的更新 我怀疑是HTTP问
本文向大家介绍JVM:早期(编译期)优化的深入理解,包括了JVM:早期(编译期)优化的深入理解的使用技巧和注意事项,需要的朋友参考一下 早期(编译期)优化 JVM的编译器可以分为三个编译器: 前端编译器:把*.java转变为*.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ) JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器
问题内容: 我刚刚开始尝试在Node.js应用程序上实现Promises。现在,我正在检查用户和密码是否存在,然后使用mongodb来查找未找到用户的用户和密码,它会设置promise.reject(),但是它返回的promise太早了,它仍然处于未决状态。如果有人可以帮助或给我有关如何重构的想法,将不胜感激。 https://gist.github.com/joshbedo/8957056 问题
问题内容: 天是用户输入以获得比(用户输入的天数)还早的结果的数字。例如,如果用户输入32天,则他们将获得30天之前的结果。 快速试用: 我的问题和尝试 来自输入字段的输入 在我的情况下,在Django中执行此操作的最佳方法是什么? 问题答案: 这样的事情将为你工作: