- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我听说不应使用 gcc 的 -O3 选项进行编译。真的吗?如果是这样,避免使用 -O3 的原因是什么?
最佳答案
答案是:这取决于您的代码。
基本的经验法则是这样的:
在 -O1 处,编译器会进行不需要太长时间计算的优化。
在 -O2 处,编译器会执行“昂贵”的优化,这可能会减慢编译过程。它们还可能使输出程序变大一点,但可能不会太大。
-Os 与 -O2 大致相同,但优化更多的是针对大小而不是速度。在大多数情况下,这两个功能并不冲突(更优化的代码执行的步骤更少,因此更小),但是有一些技巧可以重复代码以避免分支惩罚,例如。
在 -O3 处,编译器确实启动了占用空间的优化。它将更加积极地内联函数,并尝试在可能的情况下使用矢量化。
您可以在 GCC documentation 中阅读更多详细信息。如果你真的想 super 优化你的代码,那么你可以尝试启用更多甚至在 -O3 中也没有使用的选项;例如,-floop-*
选项`。
速度空间优化的问题尤其在于它们会对内存缓存的有效性产生负面影响。代码可能对 CPU 更好,但如果对你的内存来说不是更好,那么你就输了。因此,如果您的程序没有花费所有时间的单一热点,那么您可能会发现它整体速度变慢。
现实世界的优化是一门不精确的科学,原因有以下三个:
用户的硬件差异很大。
对一个代码库有利的内容可能对另一个代码库不利。
我们希望编译器能够快速运行,因此它必须做出最佳猜测,而不是尝试所有选项并选择最好的。
基本上,答案始终是,如果性能很重要的话,尝试所有优化级别,衡量您的代码的性能,然后选择最适合您的一个。每当发生重大变化时,请再次执行此操作。
如果性能不重要,-O2 是您的选择。
关于gcc - 在 GCC 中编译 : Is -O3 harmful?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25198018/
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
所以我需要对 Json 响应进行格式化,以便每行有三个元素以及需要多少行。 除了懒惰和必须跟踪计数器之外,让一行超过十二列是否有任何负面影响,因为它们会创建一个新行? 即使从 bootstrap 文档
我听说不应使用 gcc 的 -O3 选项进行编译。真的吗?如果是这样,避免使用 -O3 的原因是什么? 最佳答案 答案是:这取决于您的代码。 基本的经验法则是这样的: 在 -O1 处,编译器会进行不需
谁能告诉我或指出一些资源来解释为什么在超链接中使用 javascript:void(0) 是有害的(尤其是在 Internet Explorer 6 中)? 最佳答案 不推荐在链接中使用 javasc
我正在尝试在测试中下载文件。我已经成功开始下载而没有收到下载提示。现在的问题是我收到一条警告,说“这种类型的文件可能会损害您的计算机。您想保留...吗?”我需要选择“放弃”或“保留”。我尝试为此找到
我已经在 Play 商店和另一个市场上发布了一个应用程序,但在最近的 2 个版本中,只有该市场的用户遇到了这个警告:“被游戏保护阻止/这个应用程序可能有害/仍然安装”我怎样才能摆脱这个?我什至在发布期
我正在使用 selenium chromedriver 来自动化 Web 应用程序。在我的应用程序中,我需要下载 xml 文件。但是当我下载 xml 文件时,我收到“这种类型的文件可能会损害您的计算机
我在使用受 Recursive Makefile Considered Harmful 启发的 makefile 来构建我的程序时遇到了一些麻烦。纸。 我是 makefile 的新手,我能够很好地构建
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
(与此问题 Is It Safe to Cast Away volatile? 相关,但不完全相同,因为该问题与特定实例有关) 是否有过抛弃 volatile 被不视为危险做法的情况? (一个特别的例
我有一个简单的 Ruby 测试环境设置:minitest、guard、guard-minitest 和 terminal-notifier-guard。 我正在使用以下 Rakefile,所以我的测试
我在使用 Selenium WebDriver chrome 下载 JAR 文件时遇到问题。以下是我尝试从 stackoverflow 上可用的不同线程中找到的代码,但没有一个有效。 示例 1 - C
我有一个适用于三星平板电脑的 Android 应用程序,它使用从平板电脑耳机插孔获取电源的外部设备。当外部设备打开时(通过编程方式最大化音量),Android 会短暂地显示一个警告弹出窗口说:“如果你
(请原谅我的英文) 下面是一个非常简化的示例代码。 function test(limit) { let count = 0, undone = true; function inc(
我刚刚读了Eric Lippert's "Arrays considered somewhat harmful"文章。他告诉他的读者,他们“可能不应该返回一个数组作为公共(public)方法或属性的值
我正在使用 selenium 自动填充 chrome 中的网站。当我下载 exe 或 XML 文件时,我收到一个带有保留和丢弃选项的弹出窗口“此类文件可能会损害您的计算机”。如何以编程方式禁用此功能?
我正在使用 Selenide 框架和 Java 来编写一些自动化测试。我的测试之一是文件下载。单击下载按钮后,Chrome 会显示消息“这种类型的文件可能会损害您的计算机。您是否仍要保留 file.x
尽管将 safebrowsing.enabled 设置为 true/false,警告...这种类型的文件可能会损害您的计算机... 仍在浏览器中显示。如何隐藏这些信息? 最佳答案 启用使用 Chrom
我是一名优秀的程序员,十分优秀!