首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个大的结构指针传递给函数缓存是否有效?

将一个大的结构指针传递给函数缓存是否有效?
EN

Stack Overflow用户
提问于 2009-04-29 12:24:36
回答 2查看 201关注 0票数 1

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

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

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

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

谢谢。

-AD

EN

回答 2

Stack Overflow用户

发布于 2009-04-29 12:28:10

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-30 11:18:21

存储器访问是一种存储器访问。无论它发生在调用者还是被调用者身上都没有关系。忽略缓存,有几个理由来传递指针(通过引用传递)。

  • Separation of concerns指示被调用者应该决定它想要access.
  • Passing更多的参数,这可能会增加寄存器堆的压力和/或导致对堆栈的更多访问。
  • 传递单个参数比传递多个参数更具可读性。(可以说与关注点分离有关。)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/802112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档