首页  >  文章  >  后端开发  >  为什么 Itanium C ABI 发出双构造函数符号?

为什么 Itanium C ABI 发出双构造函数符号?

Barbara Streisand
Barbara Streisand原创
2024-11-21 17:26:12658浏览

Why Does the Itanium C   ABI Emit Dual Constructor Symbols?

构造函数符号的双重发射

说明:Itanium C ABI

Itanium C ABI 指定函数名称的修饰以包含有关其参数的信息和功能。构造函数名称遵循特定的模式:

_Z     | N      | <class_name>  | <ctor-type>          | E          | <parameters>
prefix | nested | `Thing` | Constructor | end nested | parameters: `int`

双重符号

由于 GCC 发出的构造函数类型不同,库中的构造函数符号出现两次:

  • C1:完整对象构造函数 - 构造完整对象,包括虚拟基类类。
  • C2:基础对象构造函数 - 创建对象本身并初始化数据成员和非虚拟基类。

多态性和基础构造函数

即使相关类没有虚拟基类,GCC 仍然会发出两个构造函数作为支持的副产品多态性。如果不涉及多态性,GCC 可以通过仅发出一个构造函数来进行优化。

符号名称差异

这两个构造函数由于其损坏名称中的 C1 和 C2 指示符而具有不同的名称,这表明他们执行的不同类型的构造。

结论

构造函数符号的双重发射是结果的 Itanium C ABI 和对多态性的支持,但当不使用多态性时,它可以被 GCC 优化掉。

以上是为什么 Itanium C ABI 发出双构造函数符号?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn