使用 g++ 和 -Og 选项优化的变量

问题描述 投票:0回答:2

当我使用

g++
选项用
-Og
编译我的 C++ 程序时,我看到变量是
<optimized out>
,而且当前行有时会跳过。这种行为是在这个优化级别上预期的吗?或者我有什么问题吗? gcc 的手册页说:

-Og

优化调试体验。

-Og
实现不干扰调试的优化。它应该是标准编辑-编译-调试周期的优化级别选择,提供合理的优化级别,同时保持快速编译和良好的调试体验。

因此我没想到会出现这种行为。在我的系统上,我有 g++ 版本 4.9.2 和 gdb 版本 7.7.1。

c++ g++ compiler-flags
2个回答
7
投票

这是使用

-Og
选项进行编译时的正常行为。在此优化级别,只要遵守 as-if 规则,编译器就可以进行优化。这可能包括删除变量(或转换为常量),以及删除未使用的函数。

建议要么习惯跳过,要么使用

-O0
选项进行编译。


0
投票

确实,这是一个问题。它已经在 gcc bug 报告中报告了。

错误 78685 - -Og 生成太多“”

那里有一个补丁可以修复它。

旁注,

-Og
的另一个缺点是它是内联函数。至少这个可以用
-fno-inline
轻松消除。

© www.soinside.com 2019 - 2024. All rights reserved.