剖析c++析构函数调用

Profiling C++ Destructor Calls

本文关键字:函数调用 析构 c++ 剖析      更新时间:2023-10-16

我正在分析一个在优化级别-O3上编译的c++应用程序,使用英特尔composer xe 2013的英特尔c++编译器。分析器(OS X上的工具)指出,为特定类型的对象调用析构函数花费了非常大的一部分时间。然而,它不会向我提供有关首先分配对象的函数的信息。有没有什么工具可以提供什么样的函数分配某种类型对象的最大数量的信息?

编辑:我也尝试了-profile-functions标志为英特尔c++编译器没有成功。

您可以向构造函数添加另外两个参数,即文件和行号。将该信息保存在对象中,并在调用析构函数时打印出来。你也可以选择在构造函数的宏中隐藏一些丑陋的东西。

#include <iostream>
#include <string>
using std::string;
class Object
{
    string _file;
    int _line;
  public:
    Object( const char * file, int line ) : _file(file), _line(line) {}
   ~Object() { std::cerr << "dtor for object created in file: " << _file << " line: " << _line << std::endl; }
};
int main( int argc, char * argv[] )
{
    Object obj( __FILE__, __LINE__ );
    return 0;
}

它是这样运行的

$ g++ main.cpp -o main && ./main
dtor for object created in file: main.cpp line: 16
$