我从不同的渠道(尽管主要是从我的一个同事那里)听说,在G++中使用-o3
的优化级别进行编译是“危险的”,除非证明是必要的,否则通常应该避免。
这是真的吗?如果是,为什么?我应该坚持-O2
吗?
然而,它确实倾向于揭示人们依赖于未定义的行为的情况,这是由于更严格地依赖于语言的规则,尤其是角落的情况。
作为一个个人注意事项,我现在使用-o3在金融部门运行生产软件多年,还没有遇到过如果我使用-o2就不会有的bug。
根据大众的要求,这里增加了一条:
otoh看来在使用-ofast时必须小心,它声明:
-OFAST启用全部-O3优化。它还启用了并非对所有符合标准的程序都有效的优化。
这使我得出结论,-O3的目的是完全符合标准。
问题内容: 我从各种各样的消息来源(虽然大部分是我的一位同事)听说的,-O3以g ++的优化级别进行编译在某种程度上是“危险的”,除非被证明是必要的,否则通常应该避免编译。 这是真的吗?如果是这样,为什么?我应该坚持-O2吗? 问题答案: 在gcc的早期(2.8等)和egcs时代,redhat 2.96 -O3有时是相当多的错误。但这是十年前的事了,-O3与其他级别的优化(在儿童车中)没有太大不同
在任何人告诉我查找旧答案或RTFM之前,请注意我已经这样做了,所以请在指示我查找其他地方之前阅读详细信息。 我已经确定,优化级别的差异并不像为更高的优化级别启用了一些不同类型的优化标志那么简单。 例如,我首先通过以下步骤发现了O0和O1的优化标志的差异: 这给了我一个O1对O0启用的各种优化标志的列表。 然后,我用-O0编译了代码,但是添加了O1对O0启用的所有单独的优化标志,因为结果应该和O1一
问题内容: 在Linux实时进程优先级范围为1到99的情况下,我不清楚哪个是最高优先级,即1或99。 “了解Linux内核”(O’Reilly)的7.2.2节说1是最高优先级,考虑到正常进程的静态优先级从100到139,其中100是最高优先级,这是有道理的: “每个实时过程都与一个实时优先级相关联,该优先级的值范围是1(最高优先级)到99(最低优先级)。” 另一方面,sched_setschedu
例子 $ gcc -Q --help=optimizers The following options control optimizations: -O<number> -Ofast -Os -falig
我有log4j2.xml,它部分配置为: 但是,跟踪消息并不存在于两个文件附加符(fileinfo/filedebug)中。当我更改FileDebug log level=“TRACE”时,就会出现跟踪消息。
问题内容: 我有以下代码失败,并出现以下错误: 超过最大递归深度 我试图重写此代码以允许尾递归优化(TCO)。我相信,如果发生了TCO,则该代码应该会成功。 我是否应该得出结论,Python不执行任何类型的TCO,还是只需要以不同的方式定义它? 问题答案: 你可以通过这样的转换来手动消除递归