0

我正在开发一个对对象进行大量操作的程序;创建、删除、dynamic_cast-ing、改组指针、比较内容等。这些对象中的大多数至少有 40 个字节(最多约 90 个字节),并且一次在内存中可能有超过 10,000 个。

我要确定的是我是否应该费心尝试减小它们的大小。我可以分析构造函数、新建、删除等。但是,我相信大型对象对性能的最重要影响是缓存不友好。有没有办法确定对象大小对发生的缓存未命中次数的贡献?

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

编辑:我知道没有分析就进行优化是没有用的。我要问的是如何从分析中确定它是否有问题。惩罚是否有可能分布在整个代码中,以至于标准分析工具没有帮助?

4

1 回答 1

5

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

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

不必要。

这意味着它们是猜测,它们可能是问题,但几乎可以肯定还有其他问题,没人能提前猜到。

这里讨论了一个示例,其中发现并修复了六 (6) 个不同的问题,其大小范围几乎一直加起来,就像一堆不同大小的硬币加起来一美元一样。当然,其中之一是内存分配,但只有一个。如果您解决了内存分配问题并停在那里,或者加上其他一些先入为主的问题并停在那里,您将获得多少加速?

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

要获得可以达到的真正加速比,您必须找到每个问题,而不仅仅是几个问题。该链接显示了如何做到这一点。

于 2012-07-08T19:28:13.133 回答