如何重载new / stl以更快地创建未知对象?

时间:2011-04-07 03:13:27

标签: c++ optimization memory profiling new-operator

在我的问题profiling: deque is 23% of my runtime中,我遇到的问题是'new'占我运行时的很大一部分。问题是

我必须经常使用new关键字和许多不同的类/结构(我有> 200个它们的设计)。我使用了很多stl对象,迭代器和字符串。我使用strdup和其他分配(或免费)函数。

我有一个名为> 200万次的函数。所有这一切都是创建stl迭代器,它占用了大约20%的时间(但是我记得stl的优化非常好,调试使得它的速度变慢)。

但请记住,我需要分配和释放这些迭代器> 2m次以及经常调用的其他函数。如何优化new和malloc关键字/功能?特别是对于所有这些类/结构和类/结构我没有写(stl和其他)

虽然分析说i(和stl?)比其他任何东西更多地使用new关键字。

2 个答案:

答案 0 :(得分:3)

通过添加自己的管理层来回收已分配的内存和对象,或者修改其分配器,寻找避免分配/释放的机会。关于STL分配器的文章很多:

我已经看到大型多地图代码只是通过替换默认分配器从非常慢到非常快。

答案 1 :(得分:1)

你不能让malloc更快。你可以让new更快,但我敢打赌,你可以找到办法不再打电话给他们。

查找多余调用的一种方法是仔细查看代码,但这很慢且容易出错,并且它们并不总是可见。

找到它们的一种简单而简单的方法是pause the program a few times and look at the stack。 请注意,您并不需要测量任何东西。如果发生的事情花费了很长一段时间,那么你就会在每次暂停时看到它,并且目标是找到它。 你确实得到了粗略的衡量标准,但这只是发现问题的副产品。

Here's an example这是在一系列阶段完成的,导致了大的加速因素。