对于使用C11的auto
能否提高性能这一问题,有人发表了评论?这赢得了许多选票,并表明“不太可能无意中悲观”作为答案。我以前从未注意过这个词。我想这是优化的反面。
有人能给出更详细的定义吗?在编程环境中它意味着什么?悲观的代码会是什么样子?
你可以在字典里查一下,比如这一页,上面写着:
悲观(动词):
(传递的)使(某物)效率降低,如计算机程序。
悲观意味着不仅仅是表现得不尽如人意。
一般来说,它所做的事情,通常是为了提高性能,实际上反而损害了性能。虽然不是绝对必需的,但经常会有这样的暗示,即结果实际上比你只是做了一些简单而明显的事情更糟糕。
在这种情况下,使用auto
来指定变量的类型是简单而明显的——不管它是否精确地优化,它都会建立一个性能的基线水平。当/如果显式指定类型,基本上只会有两个选择:显式定义相同的类型auto
(获得完全相同的性能),或者指定其他类型(在这种情况下,实际上只有两种可能性:它根本不起作用,或者它会进行某种转换,几乎不可避免地影响性能)。
总结:悲观通常不仅仅是“获得更少的最佳性能”。通常是“做额外的工作(可能是希望提高绩效)实际上损害了绩效。”
这主要是一个文字游戏,悲观主义者是乐观主义者的对立面。悲观是写不到最佳代码。
编译器和程序员都可能因为错误的结构而悲观,例如在不需要的时候复制东西。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测试,即原子性,一致性,隔