【发布时间】:2011-01-26 22:19:43
【问题描述】:
编译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 和.dtors 部分吗?
【问题讨论】:
-
g++ 确实有一个
-fno-use-cxa-atexit命令行选项,但我认为这不会有帮助。看起来它只是导致使用atexit()而不是cxa_atexit()。也许要问的更好的问题是为什么 g++ 一开始就生成__static_initialization_and_destruction_0()而不是在.ctors和.dtorsELF 部分中放置构造函数和析构函数调用。大概有一个很好的理由。
标签: c++ constructor g++ destructor