gpt4 book ai didi

c++ - g++ __static_initialization_and_destruction_0(int, int) - 它是什么

转载 作者:IT老高 更新时间:2023-10-28 22:21:19 26 4
gpt4 key购买 nike

编译 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部分?

最佳答案

这个 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 必须处理存档中的单个目标文件,我认为这就是它们阻止链接器优化这些调用的方式。

关于c++ - g++ __static_initialization_and_destruction_0(int, int) - 它是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2434505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com