如何确定大对象的性能开销(用C ++编写)

时间:2012-07-08 18:05:40

标签: c++ performance profiling

我正在开发一个对对象进行大量操作的程序;创建,删除,动态展示它们,在指针周围移动,比较内容等。这些对象中的大多数至少是40个字节(最多约90个字节),并且一次可能在内存中有超过10,000个。

我想确定的是我是否应该费心去减小尺寸。我可以分析构造函数,新的,删除等。但是,我认为大型对象最重要的性能来自缓存不友好。是否有一种方法可以确定对象大小对发生的缓存未命中数的贡献?

PS:我想过度使用dynamic_cast也会影响性能。然而,这更容易诊断。

编辑:我知道在不进行分析的情况下进行优化是没用的。我要问的是如何从分析中确定是否存在问题。是否可能在整个代码中分配惩罚,以便标准分析工具不会有用?

1 个答案:

答案 0 :(得分:5)

你正在以大多数人的方式接近它,直到他们越过界限并 Get It 。 正如Paul R在评论中所说,不要只是猜测。 换句话说,您的整个方法应以诊断为中心。 否则,你就像一个医生,通过假设每个人都是相同的来对待人们,对鹅来说有效的方法必须为雄鹅工作。

这是否意味着与缓存相关的问题不是问题? 这是否意味着内存分配问题不是问题?

不一定。

这意味着他们猜测并且他们可能成为问题,但几乎可以肯定还有其他任何人无法提前猜到的问题。

有一个例子讨论了here,其中发现并修复了六(6)个不同的问题,其中包含一系列大小恰好相加几乎全部

实际显示的加速比的一小部分。

要获得您可以达到的实际加速比率,您必须找到 每个 问题,而不仅仅是少数问题。 该链接显示了如何操作。