首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int __static_initialization_and_destruction_0(int,g++ )-这是什么?

int __static_initialization_and_destruction_0(int,g++ )-这是什么?
EN

Stack Overflow用户
提问于 2010-03-13 01:21:16
回答 1查看 27.8K关注 0票数 19

在编译c++文件(带有全局静态对象)之后,我在nm中获得了这个函数:

代码语言:javascript
复制
 00000000 t _Z41__static_initialization_and_destruction_0ii

 __static_initialization_and_destruction_0(int, int)  /* after c++filt */

那是什么?它将调用__cxa_atexit()

我是否可以禁止生成此函数(以及调用__cxa_atexit()),并将所有构造函数和析构函数调用放到.ctors.dtors部分?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-07 12:21:41

这个文档文件似乎告诉了你所有你想知道的关于这些函数的信息: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必须处理归档中的单个目标文件,我认为这就是他们如何阻止链接器优化这些调用。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2434505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档