剖析c++析构函数调用
Profiling C++ Destructor Calls
我正在分析一个在优化级别-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
$
相关文章:
- 什么时候调用析构函数
- C++-明确何时以及如何调用析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- C++ 防止在映射中放置()时调用析构函数
- 调用析构函数以释放动态分配的内存
- C++:使用方法调用析构函数的顺序是什么?
- 向量推回调用析构函数时调用析构函数
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- C++,我应该调用析构函数吗?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 未调用的初始化静态thread_local结构的构造函数和析构函数
- 为什么这里不调用析构函数
- 在调用 std::bind 的产品后意外调用析构函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 如何在C++中调用析构函数
- 为什么为未删除的对象调用析构函数?
- 调用析构函数时出错
- C++ 在不释放内存的情况下调用析构函数
- 从函数调用析构函数返回的对象