当我反汇编Chromium二进制文件时,我注意到有这个模式中命名的函数:
_ZN6webrtc15DecoderDatabase11DecoderInfoD2Ev.part.1
如果我将此字符串赋予c ++ filt,则输出为
webrtc::DecoderDatabase::DecoderInfo::~DecoderInfo() [clone .part.1]
那么.part.1后缀究竟是什么意思呢?如果它表明有相同功能的多个副本,为什么需要它?是否由于要求与职位无关?我使用g ++作为编译器。
答案 0 :(得分:8)
它表明析构函数是GCC partial inlining optimization的目标。通过这种优化,该函数仅部分内联到另一个函数中,其余函数被发送到它自己的部分函数中。由于这个新的部分函数没有实现完整的函数,因此它被赋予了不同的名称,因此如果需要,它可以存在于完整函数的定义旁边。
例如,似乎DecoderDatabase::DecoderInfo::~DecoderInfo的定义如下:
header('Content-Type: application/json');
echo json_encode($data);
我的猜测是DecoderDatabase::DecoderInfo::~DecoderInfo() {
if (!external) delete decoder;
}
调用了很长的一系列操作,这些操作太长而无法内联到另一个函数中。优化器会相应地将这些操作拆分为部分函数。然后,它只会将函数的delete decoder
部分内联到其他函数中。