C++ 函数名称分解:这个名称后缀是什么意思?

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 partial inlining optimization 的目标。通过这种优化,函数只是部分内联到另一个函数中,其余部分被发送到它自己的部分函数中。由于这个新的部分函数没有实现完整函数,因此它被赋予了不同的名称,因此如果需要,它可以存在于完整函数的定义旁边。

因此,例如 DecoderDatabase::DecoderInfo::~DecoderInfo 的定义如下:

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

我的猜测是 delete decoder 调用了一长串操作,太长而无法内联到另一个函数中。优化器会相应地将这些操作拆分为部分函数。然后它只会将函数的 if (!external) 部分内联到其他函数中。