【发布时间】:2016-12-06 01:59:40
【问题描述】:
关于堆栈和堆变量的访问速度的话题很多,但我找不到关于静态和堆变量的访问速度的问题和正确答案。
如果对象生命周期与程序生命周期相同,我应该更喜欢什么(在访问速度方面)?哪个更快 - 使用静态分配的对象或堆中的对象?
我说的是 C++,如果相关的话。
【问题讨论】:
-
与大多数现代操作系统相比,没有任何区别。
标签: c++ memory static heap-memory
关于堆栈和堆变量的访问速度的话题很多,但我找不到关于静态和堆变量的访问速度的问题和正确答案。
如果对象生命周期与程序生命周期相同,我应该更喜欢什么(在访问速度方面)?哪个更快 - 使用静态分配的对象或堆中的对象?
我说的是 C++,如果相关的话。
【问题讨论】:
标签: c++ memory static heap-memory
没有区别。绝对地。加载程序后,CPU 根本不知道它正在处理哪种内存(堆或静态)。
上述陈述适用于 98% 的最常见 CPU 架构/实现。尽管某些计算机可能具有以不同速度工作的不同内存区域。如果是这种情况,您需要检查这一点。这种特殊内存是如何映射的 - 这取决于特定的平台/配置。
根据编译器/环境,具有较大静态区域的程序可能加载速度稍慢。但这不是绝对的规则。
最好考虑数据的局部性(您的数据片段是否彼此靠近)以及一个值如何将另一个值从 CPU 缓存中踢出。将某些内容加载到缓存中比访问已经在缓存中的内容要慢 10-100 倍。这将产生非常明显的差异。
【讨论】: