繁体   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