首頁  >  文章  >  後端開發  >  為什麼 Itanium C ABI 發出雙重建構函式符號?

為什麼 Itanium C ABI 發出雙重建構函式符號?

Barbara Streisand
Barbara Streisand原創
2024-11-21 17:26:12655瀏覽

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