Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 将大结构指针传递到函数缓存是否有效?_Caching_Performance - Fatal编程技术网

Caching 将大结构指针传递到函数缓存是否有效?

Caching 将大结构指针传递到函数缓存是否有效?,caching,performance,Caching,Performance,如果一个结构很大,有很多成员变量。 某些函数需要访问结构中的4-5个元素才能正常工作,因此下面哪种情况可以有效缓存(缓存未命中较少)- 1.)将指向结构的指针作为参数传递给函数,函数反过来将访问所需的元素。(假设元素在结构声明中不是连续的,它们是分开的) 2.)将单个结构成员变量作为参数传递给函数 首先,这个场景会从缓存的角度影响代码的性能吗 谢谢 -AD忽略缓存问题,传递指针总是最快的,因为没有复制感兴趣字段的开销 嗯。。。如果访问的成员相隔很多缓存线,那么如果函数执行多次访问,则将它们全部收

如果一个结构很大,有很多成员变量。 某些函数需要访问结构中的4-5个元素才能正常工作,因此下面哪种情况可以有效缓存(缓存未命中较少)-

1.)将指向结构的指针作为参数传递给函数,函数反过来将访问所需的元素。(假设元素在结构声明中不是连续的,它们是分开的)

2.)将单个结构成员变量作为参数传递给函数

首先,这个场景会从缓存的角度影响代码的性能吗

谢谢


-AD

忽略缓存问题,传递指针总是最快的,因为没有复制感兴趣字段的开销

嗯。。。如果访问的成员相隔很多缓存线,那么如果函数执行多次访问,则将它们全部收集(在堆栈上,或者如果可能,甚至在寄存器中)作为参数可能会有所帮助。否则,读出参数和设置调用的额外开销可能会耗尽好处


我认为这是一个微观优化,您应该分析这两种情况,然后记录由于上述分析而对代码所做的任何更改(因为这对后来的临时观察者来说并不明显)。

内存访问就是内存访问。不管它发生在呼叫者还是被呼叫者身上。忽略缓存,传递指针(按引用传递)有几个原因

  • 关注点的分离要求被调用方决定要访问的内容
  • 传递更多参数可能会增加寄存器文件的压力和/或导致对堆栈的更多访问
  • 传递单个参数比传递多个参数更具可读性。(可能与关注点分离有关。)

提高缓存性能的唯一方法是提高局部性。在
结构
(或任何)定义中,将变量排列为连续的。将算法安排为仅访问每个结构一次。如果这些不是简单的更改,并且程序是缓存绑定的,那么性能将只需要那么多编程工作。

由于复制周期和内存开销的明显原因,在这里传递结构实例肯定不是一个选项。