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

Dan*_*Dan 0 c++ performance profiling

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

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

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

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

Mik*_*vey 5

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

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

不必要.

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

这里讨论了一个例子,其中发现并修复了六(6)个不同的问题,具有几乎所有时间恰好相加的一系列尺寸,一堆不同尺寸的硬币可以加起来一美元.当然,其中一个是内存分配,但只有一个.如果你已经修复了内存分配问题并停在那里,或者加上一些其他先入为主的问题而停在那里,你会得到多少加速?

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

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