如果一个人有一个很大的结构,有很多成员变量。 某些函数需要访问结构中的4-5个元素才能正常工作,因此下面哪个场景可以缓存有效(缓存丢失少) -
1。)将指针传递给结构作为函数的参数,然后函数将访问所需的元素。(假设元素在结构声明中不连续,它们是分开的)
2.)将单个结构成员变量作为参数传递给函数。
首先,这种情况是否会首先影响缓存视图中代码的性能?
感谢。
-AD
答案 0 :(得分:1)
忽略缓存问题,传递指针总是最快的,因为没有复制有趣字段的开销。
答案 1 :(得分:1)
嗯......如果访问的成员分开了很多缓存行,那么它们可能有助于将它们全部收集(在堆栈中,如果可能,甚至在寄存器中)作为参数,如果该功能可以进行多次访问。如果没有,那么读出参数和设置调用的额外开销可能会消耗掉这些好处。
我认为这是一个微优化,您应该对这两种情况进行分析,然后记录由于所述分析而对您执行的代码所做的任何更改(因为对于不经意的观察者来说,这不会是显而易见的,稍后)。
答案 2 :(得分:0)
内存访问是内存访问。它是在调用者还是被调用者中发生并不重要。忽略缓存,传递指针有几个原因(通过引用传递)。
提高缓存性能的唯一方法是改善位置。在struct
(或其他)定义中将变量排列为连续的。安排算法只访问每个结构一次。如果这些不是简单的更改,并且程序是缓存绑定的,那么性能只需要花费很多编程工作。