簡體   English   中英

C ++函數名稱demangling:這個名稱后綴是什么意思?

[英]C++ function name demangling: What does this name suffix mean?

當我反匯編Chromium二進制文件時,我注意到有這種模式中命名的函數: _ZN6webrtc15DecoderDatabase11DecoderInfoD2Ev.part.1

如果我將此字符串賦予c ++ filt,則輸出為webrtc::DecoderDatabase::DecoderInfo::~DecoderInfo() [clone .part.1]

那么.part.1后綴究竟是什么意思呢? 如果它表明有相同功能的多個副本,為什么需要它? 是否由於要求與職位無關? 我使用g ++作為編譯器。

它表明析構函數是GCC 部分內聯優化的目標。 通過這種優化,該函數僅部分內聯到另一個函數中,其余函數被發送到它自己的部分函數中。 由於這個新的部分函數沒有實現完整的函數,因此它給出了一個不同的名稱,因此如果需要它可以存在於完整函數的定義旁邊。

例如,似乎DecoderDatabase :: DecoderInfo :: ~DecoderInfo的定義如下:

DecoderDatabase::DecoderInfo::~DecoderInfo() {
    if (!external) delete decoder;
}

我的猜測是delete decoder調用很長的一系列操作,這些操作太長而無法內聯到另一個函數中。 優化器會相應地將這些操作拆分為部分函數。 然后它只會將函數的if (!external)部分內聯到其他函數中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM