GCC 能否优化具有相同主体的函数的代码大小?
Can GCC optimize code size for functions with the same body?
我正在使用GDB调试一个C++程序,并面临不同的功能结果是相同的。这就是我的意思:
some.hpp
class Base{
virtual bool foo() const;
virtual bool bar() const;
}
some.cpp
bool Base::foo() const {
return false;
}
bool Base::bar() const {
return false;
}
问题是在 gdb 中我看到以下内容:
(gdb) p someBaseObject->foo
$1 = {bool (const Base * const)} 0xdeadf00d <Base::foo() const>
(gdb) p someBaseObject->bar
$2 = {bool (const Base * const)} 0xdeadf00d <Base::foo() const>
我想GCC优化了这两个函数以节省代码大小。是吗?不过,这会使调试变得复杂...
如果您想知道如何编译某些内容,那么查看编译器资源管理器通常非常有帮助。
这是您的代码(调用两个函数( https://gcc.godbolt.org/z/g2hfcA
为"过程间优化相同代码折叠"启用编译器标志时,-fipa-icf
允许编译器替换相同的函数。这会导致bar
在程序集中消失。如果您使用-O3
进行编译,这也将被激活。
海湾合作委员会关于-fipa-icf
的文件:
FIPA-ICF:
对函数和只读变量执行相同的代码折叠。优化可减少代码大小,并可能干扰展开 通过将一个函数替换为一个等效的函数来堆叠 名字。优化在链接时间下更有效 已启用优化。
虽然行为类似于金链的ICF 优化,GCC ICF在不同级别上工作,因此 优化不一样 - 发现等效 只有海湾合作委员会和黄金才能找到的等价物。
默认情况下,此标志在 -O2 和 -OS 处启用。
相关文章:
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 是否可以像这样编写c malloc函数代码
- 函数范围的静态变量如何导致与共享库中函数代码的未来使用不兼容
- 如何将C++ lambda 函数代码转换为 C#?
- 该构造函数代码如何将指针作为参数
- 调用C++具有复杂参数和复杂返回类型的函数 C 代码
- "_FCbuild"不能用作函数 - C/C++ 代码错误
- 复制赋值和复制构造函数(代码C++的差异)
- 反向链表的递归函数(代码段说明)
- 当满足条件时,是否可以在 GLSL 着色器中回调 C/C++ 函数/代码
- 在构造函数代码之前禁用默认类成员初始化
- 以下移动构造函数代码安全吗?
- C++构造函数代码..这叫什么
- 如何更改SWIG生成的CSHARP文件中的构造函数代码
- 找不到当前函数(代码::块)C++的边界
- 使用模板进行 C++ 函数代码泛化
- 编写此指针函数代码的长格式方法是什么
- C++某些构造函数代码之间的区别
- 错误C2668从站点对重载函数代码的调用不明确http://h264bitstream.sourceforge.net/