-fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
How -fvisibility-inlines-hidden differs from -fvisibility=hidden in gcc
根据 http://gcc.gnu.org/wiki/Visibility,
使用
-fvisibility=hidden
,您告诉 GCC,每个未明确标记为可见性属性的声明都具有隐藏的可见性。
和
-fvisibility-inlines-hidden
会导致所有内联类成员函数具有隐藏的可见性
当我编译一个非常大的项目时,在我看来,与使用-fvisibility=hidden
相比,将-fvisibility-inlines-hidden
与-fvisibility=hidden
一起添加确实可以隐藏更多的符号。但是我找不到一个最低限度的例子来显示-fvisibility-inlines-hidden
生效的确切差异。我也尝试了这个例子,但没有看到后者的效果。
有人可以给我看一个最小的例子,表明如果我已经在使用-fvisibility=hidden
,-fvisibility-inlines-hidden
仍然是必要的?我正在使用 GCC 5.3.0
根据 http://gcc.gnu.org/wiki/Visibility
。命令行开关:
-fvisibility-inlines-hidden
.这会导致所有内联类成员函数具有隐藏的可见性,从而导致导出符号表大小和二进制大小显着减少,尽管不如使用-fvisibility=hidden
那么多。但是,-fvisibility-inlines-hidden
可以在不更改源的情况下使用,除非您需要覆盖它,其中地址标识对函数本身或任何函数本地静态数据很重要。
换句话说,如果您已经使用-fvisibility-inlines-hidden
,则无法帮助您隐藏更多符号-fvisibility=hidden
.
但是您几乎可以安全地添加-fvisibility-inlines-hidden
标志来构建一个导出所有符号的程序,并免费减少导出符号表,因为排除的符号无论如何都是内联的,因此它们可以在没有导出符号表的其他模块中使用。
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 无论代码长度如何,以下代码的内存要求有何不同?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- std::u8string与std::string有何不同?
- 两种类型转换有何不同?
- 这个语句到底是什么意思 stack<int, list<int> > 它与 stack 有何不同<int>?
- 英特尔®事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
- 指向成员函数的指针与指向数据成员的指针有何不同
- 字符 * 和字符串在C++中有何不同?(在描述中编写代码)
- 在C++中,Mixin与面向策略的设计有何不同
- "cin>>"与"cin.get"有何不同?还是不是?
- C++11: boost::make_tuple 与 std::make_tuple 有何不同?
- 双重列表复制构造函数:与单一列表复制构造函数有何不同
- 在C++中声明可见性/访问权限的方法有何不同