当前位置: 首页 > 知识库问答 >
问题:

什么是悲观?

季森
2023-03-14

对于使用C11的auto能否提高性能这一问题,有人发表了评论?这赢得了许多选票,并表明“不太可能无意中悲观”作为答案。我以前从未注意过这个词。我想这是优化的反面。

有人能给出更详细的定义吗?在编程环境中它意味着什么?悲观的代码会是什么样子?

共有3个答案

龙德润
2023-03-14

你可以在字典里查一下,比如这一页,上面写着:

悲观(动词):

(传递的)使(某物)效率降低,如计算机程序。

潘安平
2023-03-14

悲观意味着不仅仅是表现得不尽如人意。

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

在这种情况下,使用auto来指定变量的类型是简单而明显的——不管它是否精确地优化,它都会建立一个性能的基线水平。当/如果显式指定类型,基本上只会有两个选择:显式定义相同的类型auto(获得完全相同的性能),或者指定其他类型(在这种情况下,实际上只有两种可能性:它根本不起作用,或者它会进行某种转换,几乎不可避免地影响性能)。

总结:悲观通常不仅仅是“获得更少的最佳性能”。通常是“做额外的工作(可能是希望提高绩效)实际上损害了绩效。”

蓝侯林
2023-03-14

这主要是一个文字游戏,悲观主义者是乐观主义者的对立面。悲观是写不到最佳代码。

编译器和程序员都可能因为错误的结构而悲观,例如在不需要的时候复制东西。auto关键字将至少确保您获得“最接近的类型”,因此没有(不必要的)类型转换。

请注意,悲观是指代码“非最佳”没有好处时:

这并不悲观,“如果我们花六个月的时间对此进行优化,它的运行速度将提高0.5%”。除非要求速度提高0.5%,否则花六个月在这上面可能是浪费时间。

此外,所需的功能(如安全性)并不悲观:“代码比可能的慢,因为我们使其安全”。

调试生成不是“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 ... 
}

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

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

[恐怕不是自动的例子]

 类似资料:
  • Synchronized的并发策略是悲观的,不管是否产生竞争,任何数据的操作都必须加锁。 乐观锁的核心是CAS,CAS包括内存值、预期值、新值,只有当内存值等于预期值时,才会将内存值修改为新值。

  • Hibernate是我的JPA实现。

  • 问题内容: 什么是selenium? 当您打开Selenium的官方页面时,您首先读到的是“什么是Selenium?”中的“ Selenium automates browser”。部分。“selenium的哪个部分适合我?”部分 下面提供了Selenium WebDriver和Selenium IDE之间的选择。由此,我推断出Selenium是一组工具,并且该集合包括IDE,WebDriver

  • 硒是什么? 当你打开Selenium的官方页面,首先看到的是“什么是Selenium”中的“Selenium自动浏览器”。节。“硒的哪一部分对我合适?”下面提供了Selenium WebDriver和Selenium IDE之间的选择。由此,我推断Selenium是一个工具集合,该集合包括IDE、WebDriver API(语言绑定)、网格、Selenium独立服务器、浏览器驱动程序。一个人必须下

  • 本文向大家介绍请说明一下锁机制的作用是什么?并且简述一下Hibernate的悲观锁和乐观锁机制是什么?相关面试题,主要包含被问及请说明一下锁机制的作用是什么?并且简述一下Hibernate的悲观锁和乐观锁机制是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:锁 参考回答: 有些业务逻辑在执行过程中要求对数据进行排他性的访问,于是需要通过一些机制保证在此过程中数据被锁住不会被外界修改,这就

  • 本文向大家介绍什么是事务?什么是锁?相关面试题,主要包含被问及什么是事务?什么是锁?时的应答技巧和注意事项,需要的朋友参考一下 答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔