2016-12-06 90 views
0

关于访问堆栈和堆变量的速度有很多话题,但我无法找到有关静态和堆变量访问速度的问题和正确答案。访问静态和堆内存的速度

如果对象生命周期与程序生存期相同,我应该如何选择(在访问速度方面)?哪个更快 - 在堆中使用静态分配的对象或对象?

我在说C++,如果相关的话。

+1

对于大多数现代操作系统,没有任何区别。 –

回答

2

没有区别。绝对。一旦你的程序加载完毕,CPU根本不知道它正在处理什么类型的内存(堆或静态)。

对于95%的最常见的CPU架构/实现,以上情况属实。虽然有些电脑可能有不同的内存区域,以不同的速度工作。如果是这种情况,你需要检查这一点。这个内存如何映射 - 这是与设计有关的。

根据具有较大静态区域的编译器/环境程序可能会加载速度稍慢。但这不是绝对的规则。

最好考虑一下数据的位置(您的数据片段是否彼此靠得很近)以及一个值如何从CPU缓存中取出其他值。加载某物到缓存比访问已经存在于缓存中的东西慢10到100倍。这会造成非常明显的差异。

+0

谢谢你的回答,数据局部性和程序架构超出了问题的范围。我只是无法找到有关静态/堆内存实际访问时间的良好信息,并询问了社区。 – avtomaton