如果我有一个很大的结构(有很多成员变量).这个结构指针传递给我的代码中的许多函数.在几乎所有函数中,这种结构的一些成员变量经常被使用.
如果我将那些经常使用的成员变量放在结构声明的开头,它是否会优化MCPS的代码 - 每秒百万个周期(代码消耗的时间).如果我按时将频繁访问的成员放入,那么它们是否会被有效/更少地访问,而不是将它们随机地放在结构声明底部的结构中?如果是的话逻辑是什么?
如果我在某个函数中访问了一个结构成员,如下所示:
structurepointer1-> member_variable
如果我将它分配给局部变量然后访问局部变量,它是否有助于在MCPS方面优化它,如下所示?
local_variable = structurepointer1->member_variable;
Run Code Online (Sandbox Code Playgroud)
如果是,那它有什么帮助?
Tyl*_*nry 14
1)结构中字段的位置应该对其访问时间没有影响,除非你的结构非常大且跨越多个页面,最好定位常用的快速成员连续关闭以增加引用的局部性并尝试减少缓存未命中.
2)也许/也许不是.事实上它可能会让事情变得更慢.如果变量不是易失性的,那么编译器可能足够聪明,无论如何都要将字段存储在寄存器中.即使没有,你的处理器也会缓存它的值,但如果使用距离相差很远,那么这可能无济于事,其间还有很多其他内存访问.如果该值已存储在寄存器中或将保留在处理器的缓存中,则将其分配给本地只会是不必要的额外工作.
标准优化免责声明:在优化之前始终进行配置.确保您要优化的内容值得优化.始终对您尝试过的优化进行概述,并确保它们实际上更快(而不是更慢).
首先,强制性免责声明:对于所有性能问题,您必须对代码进行分析,以了解可以在哪些方面进行改进.
但一般来说,将数据保存在处理器缓存中的任何操作都会有所帮助.将最常访问的项目放在一起将有助于实现这一点.