我注意到,如果我在由 g++
编译的程序上运行 strings
,输出包含它使用的各种类的名称。
程序是用 -O3
编译的,没有 -g
或 -p
,当我去掉二进制。
我想知道为什么 g++
必须将此信息存储在二进制文件中?出现的类名似乎都是使用虚函数的类,所以我怀疑这与它有关。
最佳答案
这可能与 RTTI 有关,具体来说,RTTI 允许您查询给定变量的类的名称。查看typeid关键词。如果是这种情况,那么它就可以解释为什么它只发生在具有虚函数的类中——RTTI 仅适用于具有虚函数的类。
编辑:正如@xeno 指出的那样,它确实是 RTTI,如果您添加 -fno-rtti
,则类名不会出现在字符串输出中。
关于c++ - 为什么 g++ 在编译后的二进制文件中存储类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948381/