如何重载new/stl以使未知对象更快
How do i overload new/stl to make unknown objects faster?
在我的问题分析中:deque占我运行时的23%,我有一个问题,"new"占我运行时间的很大一部分。问题是
我不得不在许多不同的类/结构上大量使用新关键字(我有超过200个类/结构,而且是经过设计的(。我使用了很多stl对象、迭代器和字符串。我使用strdup和其他分配(或空闲(函数。
我有一个函数被调用了超过200万次。它所做的只是创建stl迭代器,它占用了超过20%的时间(然而,据我所知,stl优化得很好,调试使它慢了很多(。
但请记住,我需要分配和释放这些迭代器>2m次,以及经常调用的其他函数。如何优化new和malloc关键字/函数?特别是对于所有这些类/结构和我没有写的类/结构(stl和其他(
尽管评测显示我(和stl?(使用新关键字的次数比其他任何关键字都多。
通过添加自己的管理层来回收已经分配的内存和对象,或者修改它们的分配器,寻找避免分配/释放的机会。有很多关于STL分配器的文章:
- http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4079
- http://bmagic.sourceforge.net/memalloc.html
- http://www.codeproject.com/KB/stl/blockallocator.aspx
我看到过大型多映射代码通过替换默认分配器从不可用的慢变为非常快。
您无法使malloc
更快。你也许可以让new
更快,但我敢打赌,你可以找到不那么频繁地调用它们的方法。
找到对任何东西的过度调用的一种方法是仔细阅读代码寻找它们,但这很慢,而且容易出错,而且它们并不总是可见的。
找到它们的一个简单而简单的方法是暂停程序几次并查看堆栈。请注意,您实际上不需要测量任何东西。如果发生的事情需要很长一段时间,那就是你在每次暂停时看到它的概率,目标是找到它。你确实得到了一个粗略的测量,但这只是发现问题的副产品。
这里有一个例子,在这个例子中,这是在一系列阶段中完成的,产生了很大的加速因子。
相关文章:
- 如何在C++中循环访问未知对象方法?
- C++:将未知类型的对象存储为成员变量的类
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 将向量项传递给具有未知数量参数的函数对象
- C++中的自由定理:模板是否本质上对未知类型的对象无知和中立?
- 未知的 C++ 对象实例化语法
- std::vector 如何支持未知大小的自定义对象的连续内存
- 在 Duktape 中迭代未知对象
- 未知EABI对象属性44
- qt qfiledialog创建未知的com对象和安全性
- C++派生类的设置属性到从同一基类派生的未知类对象
- 创建未知数量的对象,每个对象在运行时 c++ 具有特定的对象名称
- 未知数量的对象的 CIN
- 使用以前未知的模板存储通用对象
- 如何在对象类型未知时实现交换函数
- 类成员是类型未知的派生对象
- Swig-存储未知对象,直到下次调用C++函数
- 是否有可能将boost::bind绑定到已知类但(尚未)未知对象的成员函数?
- 一个未知对象的序列化
- 如何重载new/stl以使未知对象更快