avt*_*ton 1 c++ memory static heap-memory
有很多关于堆栈和堆变量访问速度的主题,但我找不到有关静态和堆变量访问速度的问题和正确答案。
如果对象生命周期与程序生命周期相同,我应该选择什么(就访问速度而言)?使用静态分配的对象和堆中的对象哪个更快?
我正在谈论 C++(如果相关的话)。
没有区别。绝对地。加载程序后,CPU 根本不知道它正在处理哪种内存(堆内存或静态内存)。
上述说法适用于 98% 最常见的 CPU 架构/实现。尽管某些计算机可能具有不同的内存区域,并且以不同的速度运行。如果是这种情况,您需要检查一下。如何映射这个特殊的内存 - 这取决于特定的平台/配置。
根据编译器/环境的不同,具有大静态区域的程序可能加载速度会稍慢。但这并不是绝对的规则。
最好考虑一下数据的局部性(数据块是否彼此靠近)以及一个值如何将其他值从 CPU 缓存中剔除。将某些内容加载到缓存中比访问已存在于缓存中的内容慢 10-100 倍。这将产生非常明显的差异。