C++ 分配更多内存会降低操作速度吗?
我正在读一本名为《实时渲染》的书,作为光线-球体相交算法的优化,使用球体的平方半径,因此作者说: 标量r2(半径的平方)可以计算一次并存储在数据中 球体的结构,以进一步提高效率。在里面 练习这样的“优化”可能会慢一些,因为这样会占用更多的内存 访问,是影响算法性能的主要因素 这怎么可能没有效率呢?C++ 分配更多内存会降低操作速度吗?,c++,performance,C++,Performance,我正在读一本名为《实时渲染》的书,作为光线-球体相交算法的优化,使用球体的平方半径,因此作者说: 标量r2(半径的平方)可以计算一次并存储在数据中 球体的结构,以进一步提高效率。在里面 练习这样的“优化”可能会慢一些,因为这样会占用更多的内存 访问,是影响算法性能的主要因素 这怎么可能没有效率呢?r2值将在函数的本地范围内访问一次,这会比显式计算r2=r*r慢吗 我甚至不确定缓慢的操作是否是值访问,或者是否实际将数据存储在内存中。您确实应该对其进行基准测试,但作者可能想的是。有时(经常但不总是)
r2
值将在函数的本地范围内访问一次,这会比显式计算r2=r*r慢吗
我甚至不确定缓慢的操作是否是值访问,或者是否实际将数据存储在内存中。您确实应该对其进行基准测试,但作者可能想的是。有时(经常但不总是)重复的缓存未命中(或错误)会减慢程序的速度 通常,当(,)处理器缺少缓存(因此三级缓存未命中)到从RAM棒中获取数据的程度时,它可能会丢失几百个周期(或纳秒),这足以进行几百次算术运算(对寄存器内或一级缓存内的数据)。 因此,一个简单的计算可能不值得(例如,因为具有更大的结构可能需要更多的内存带宽和更多的缓存未命中) 但是缺点在于细节,你需要基准测试(在不同的计算机上,事情可能会有所不同,例如在你的笔记本电脑和我的桌面上,运行相同的Linux操作系统,使用相同的编译器和相同的二进制可执行文件),当然,在你的编译器中启用(例如,
g++-Wall-O2-march=native
with…)
你会通过阅读网上的书学到更多
阅读上这篇发人深省的文章。它还提供了一个典型PC上各种操作的大致时间表(它从别处借来了)。我记得以前就在这一点上。这是不久前的事,我仍在学习这一点。我将尝试提供一个非正式的答案来补充已经精确的答案 这两个链接对我特别有帮助:
template<typename T> struct sphere
{
T posx,posy;
T r;
T r2;
template<typename T> static sphere<T> create( T posx, T posy, T r );
}