我正在开发一个对对象进行大量操作的程序;创建,删除,动态展示它们,在指针周围移动,比较内容等。这些对象中的大多数至少是40个字节(最多约90个字节),并且一次可能在内存中有超过10,000个。
我想确定的是我是否应该费心去减小尺寸。我可以分析构造函数,新的,删除等。但是,我认为大型对象最重要的性能来自缓存不友好。是否有一种方法可以确定对象大小对发生的缓存未命中数的贡献?
PS:我想过度使用dynamic_cast也会影响性能。然而,这更容易诊断。
编辑:我知道在不进行分析的情况下进行优化是没用的。我要问的是如何从分析中确定是否存在问题。是否可能在整个代码中分配惩罚,以便标准分析工具不会有用?
答案 0 :(得分:5)
你正在以大多数人的方式接近它,直到他们越过界限并 Get It 。 正如Paul R在评论中所说,不要只是猜测。 换句话说,您的整个方法应以诊断为中心。 否则,你就像一个医生,通过假设每个人都是相同的来对待人们,对鹅来说有效的方法必须为雄鹅工作。
这是否意味着与缓存相关的问题不是问题? 这是否意味着内存分配问题不是问题?
不一定。
这意味着他们猜测并且他们可能成为问题,但几乎可以肯定还有其他任何人无法提前猜到的问题。
有一个例子讨论了here,其中发现并修复了六(6)个不同的问题,其中包含一系列大小恰好相加几乎全部时间,一堆不同大小的硬币可以加起来一美元的方式。 当然,其中一个是内存分配,但只有一个。 如果你已经修复了内存分配问题并在那里停了下来,或者加上一些其他先入为主的问题而停在那里,你会获得多少加速?
实际显示的加速比的一小部分。
要获得您可以达到的实际加速比率,您必须找到 每个 问题,而不仅仅是少数问题。 该链接显示了如何操作。