如何解决Og 标志如何影响内联函数乐观主义者的 gcc
我尝试了一些东西,但我很困惑。
具有以下 C++ 代码
#include <map>
int foo() {
std::map<int,int> a;
a[1] = 2;
return 0;
}
int main() {
return foo();
}
和 gcc 版本
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
首先,我发现将 -Og 标志添加到 gcc 时,operator[int] 被优化了。
其次,通过"g++ -Q --help=optimizers" 和 "g++-Q --help=optimizers -Og" 的差异结果,我得到了相同的 Og 编译标志:
-fcombine-stack-adjustments
-fcompare-elim
-fcprop-registers
-fdefer-pop
-fforward-propagate
-fguess-branch-probability
-fipa-profile
-fipa-pure-const
-fipa-reference
-fmerge-constants
-fshrink-wrap
-fsplit-wide-types
-ftree-bit-ccp
-ftree-ccp
-ftree-ch
-ftree-copy-prop
-ftree-copyrename
-ftree-dce
-ftree-dominator-opts
-ftree-dse
-ftree-fre
-ftree-sink
-ftree-slsr
-ftree-ter
第三,我每次都将上述标志之一添加到 gcc。然后我发现 operator[int] 没有优化。
问题是:gcc 决定是否内联的真正原因是什么?
另一个令人困惑的地方: 当添加“-finline -Og”或“finline -finline-mall-functions -findirect-inlining -finline-functions -finline-functions- called-once -Og”时,操作符[int]没有被优化掉。 但是加上“-Og -finline”,operator[int]就被优化掉了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。