【问题标题】:Profiling C++ Destructor Calls分析 C++ 析构函数调用
【发布时间】:2014-05-03 22:08:53
【问题描述】:

我正在使用 intel composer xe 2013 中的 intel c++ 编译器分析在优化级别 -O3 上编译的 C++ 应用程序。分析器(OS X 上的仪器)指出,大部分时间都花在调用析构函数上特定类型的对象。但是,它不会向我提供有关首先分配对象的函数的信息。是否有任何工具可以提供有关哪些函数分配某种类型对象的最大数量的信息?

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

【问题讨论】:

  • 您在寻找适用于 OS X 的工具吗?
  • 严格要求必须与C++兼容
  • 如果您使用g++/gcc,我认为gprof 将足以满足您的需求。看看这个tutorial on gprof
  • 您是否控制相关对象的源代码?
  • 构造函数是定义在头文件还是单独的c++实现文件(单独的编译单元)?

标签: c++ profile


【解决方案1】:

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

#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
$

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2021-07-19
    • 2012-07-12
    • 2016-10-28
    • 2019-01-09
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多