c++ - 分析结果中的 _init 是什么
问题描述
我在个人资料结果中看到了一个奇怪的函数 (_init):
在父函数中有一个uint64_t
初始化和一些数学运算(求和,乘法,...)。
这是什么_init
功能?它与那个uint64_t
初始化有关吗?
编辑:我正在使用gcc version 8.3.0
解决方案
_init
是一个在加载共享库时调用的函数。在我们的示例中,它将取决于您链接的库(ldd
针对二进制文件运行应该会给您一些提示)。
附带说明一下,_init
and_fini
函数现在已经过时了,应该用__attribute__ ((constructor))
and代替__attribute__ ((destructor))
。引用文档 5.2.1:
5.2.1。特殊函数 _init 和 _fini(过时/危险)
历史上有两个特殊函数,_init 和 _fini,可用于控制构造函数和析构函数。但是,它们已经过时,并且它们的使用可能会导致不可预测的结果。你的图书馆不应该使用这些;改用上面的函数属性构造函数和析构函数。
如果您必须使用使用 _init 或 _fini 的旧系统或代码,那么它们是如何工作的。为初始化和完成模块定义了两个特殊函数:_init 和 _fini。如果函数 ``_init'' 在库中导出,则在首次打开库时调用它(通过 dlopen() 或简单地作为共享库)。在 C 程序中,这只是意味着您定义了一些名为 _init 的函数。有一个名为 _fini 的相应函数,每当客户端完成使用该库时调用该函数(通过调用 dlclose() 使其引用计数为零,或在程序正常退出时)。这些函数的 C 原型是:
void _init(void); void _fini(void);
推荐阅读
- javascript - Javascript 按钮,只需一次
- beautifulsoup - 从 html 中提取文本和链接不适用于 bs4
- python - Trying to run a function in Python OOP but it keeps being read as a str
- javascript - 更改触发路由器事件的导航
- java - 如何消除同时访问 Notes 文档的可能性
- html - HTML 画布到 WPF XAML 画布
- ios - '结果类型的值
'没有成员'值' - python - 无法从 numpy 数组中选择行来执行 std
- java - 我不断收到错误。不兼容的类型:ArrayList
无法转换为 ArrayList - wordpress - 主题 Wordpress 的大小