编译 c++ 文件(带有全局静态对象)后,我进入nm
输出这个函数:
00000000 t _Z41__static_initialization_and_destruction_0ii
__static_initialization_and_destruction_0(int, int) /* after c++filt */
它是什么?它会调用__cxa_atexit()
我可以禁用此函数的生成(并调用__cxa_atexit()
)并将所有构造函数和析构函数调用放入.ctors
and .dtors
部分?
这个文档文件似乎告诉你所有你想知道的关于这些功能的信息:http://www.nsnam.org/docs/linker-problems.doc http://www.nsnam.org/docs/linker-problems.doc
据我所知,gcc 创建了一个__static_initialization_and_destruction_0
对于每个需要调用静态构造函数的翻译单元。然后它放置__do_global_ctors_aux
进入.ctors
部分,然后调用__static_initialization_and_destruction_0
在每个翻译单元上。
但问题似乎比这复杂得多; gcc 必须处理存档中的各个目标文件,我认为这就是它们阻止链接器优化这些调用的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)