所以我的老师告诉我,我应该根据需要即时计算中间结果而不是存储它们,因为现在处理器的速度比内存速度快得多。
所以当我们计算一个中间结果时,我们也需要使用一些内存,对吗?谁能给我解释一下吗?
最佳答案
你的老师是对的如今处理器的速度比内存的速度快得多。访问 RAM 比访问内部存储器:高速缓存、寄存器等更慢。
假设您要计算一个三角函数:sin(x)。为此,您可以调用函数(数学库提供一个函数,或者实现您自己的函数)计算值;或者您可以使用存储在内存中的查找表来获取结果,这意味着存储中间值(某种程度上)。
调用一个函数会导致执行许多指令,而使用查找表会导致更少的指令(获取LUT的地址,获取所需元素的偏移量,从地址+偏移量读取)。我在这种情况下,存储中间值更快
但如果您要执行 c = a+b
,计算该值将比从 RAM 中的某处读取它快得多。请注意,在这种情况下,要执行的指令数将是相似的。
因此,虽然访问 RAM 确实较慢,但是否值得访问 RAM 而不是进行计算是一个明智的问题,需要考虑几件事:要执行的指令数,如果计算发生在循环,您可以利用架构管道、缓存内存等。 没有唯一的答案,您需要单独分析每种情况。
关于c++ - C 和 C++ 的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22303126/