当您调用 new[] 为 N 个整数分配一个数组时,是否保证该数组将按顺序分配到物理内存中?
When you call new[] to allocate an array for N integers is it guaranteed that the array is going to be allocated sequentially in physical memory?
据我了解,每个计算机程序始终使用虚拟内存,而处理物理内存的方式取决于操作系统。
我正在参加一门算法工程课程,有人提到如果高速缓存内存是无限的并且一个高速缓存行的大小为 B
那么如果你只想扫描 N
个元素的数组将是 N/B
我知道这在理论上是如何工作的,因为我们假设 N
元素在物理内存中一个接一个地定位。
但是,这实际上是真的吗?如果虚拟内存是顺序分配的,是不是也意味着物理内存也是顺序分配的?
在我看来,在实践中,假设 N
不大于缓存大小,如果 N
元素不存在,您将得到超过 N/B
缓存未命中t 在物理内存 (RAM) 中顺序分配。
可能我误解了虚拟内存和物理内存的区别,我不确定。
正如你所说:数组元素在虚拟内存中是连续的,但在物理内存中不一定。
在类似 PC 的架构中,内存以页为单位进行分配,页通常比缓存行大得多(通常是几千字节而不是几十字节)。每个页面将连续的虚拟内存范围映射到连续的物理内存范围。因此每个缓存行仍将跨越物理内存的连续范围,并且物理内存中的不连续性不会导致任何额外的缓存未命中。
数组在虚拟内存中是连续的space。在物理 space 中,只有适合单个页面的片段是连续的。看过最好的电脑内存介绍可以下载from here.
不需要为整个数组依次全局分配物理内存。为了保持 N/B 观察,您所需要的只是在单个缓存行的范围内按顺序分配物理内存。换句话说,当你越过缓存行的边界时,下一行是来自物理内存中的相邻地址还是来自较远的某个物理地址都没有关系。
如果虚拟内存页面以一定数量的高速缓存行为增量进行分配,并且与高速缓存行对齐,则为真。
这两个假设对于当今存在的所有体系结构都可能是正确的,因为允许虚拟页面与缓存行不对齐或使虚拟页面大小奇数会对虚拟内存体系结构的硬件支持提出更多要求。
据我了解,每个计算机程序始终使用虚拟内存,而处理物理内存的方式取决于操作系统。
我正在参加一门算法工程课程,有人提到如果高速缓存内存是无限的并且一个高速缓存行的大小为 B
那么如果你只想扫描 N
个元素的数组将是 N/B
我知道这在理论上是如何工作的,因为我们假设 N
元素在物理内存中一个接一个地定位。
但是,这实际上是真的吗?如果虚拟内存是顺序分配的,是不是也意味着物理内存也是顺序分配的?
在我看来,在实践中,假设 N
不大于缓存大小,如果 N
元素不存在,您将得到超过 N/B
缓存未命中t 在物理内存 (RAM) 中顺序分配。
可能我误解了虚拟内存和物理内存的区别,我不确定。
正如你所说:数组元素在虚拟内存中是连续的,但在物理内存中不一定。
在类似 PC 的架构中,内存以页为单位进行分配,页通常比缓存行大得多(通常是几千字节而不是几十字节)。每个页面将连续的虚拟内存范围映射到连续的物理内存范围。因此每个缓存行仍将跨越物理内存的连续范围,并且物理内存中的不连续性不会导致任何额外的缓存未命中。
数组在虚拟内存中是连续的space。在物理 space 中,只有适合单个页面的片段是连续的。看过最好的电脑内存介绍可以下载from here.
不需要为整个数组依次全局分配物理内存。为了保持 N/B 观察,您所需要的只是在单个缓存行的范围内按顺序分配物理内存。换句话说,当你越过缓存行的边界时,下一行是来自物理内存中的相邻地址还是来自较远的某个物理地址都没有关系。
如果虚拟内存页面以一定数量的高速缓存行为增量进行分配,并且与高速缓存行对齐,则为真。
这两个假设对于当今存在的所有体系结构都可能是正确的,因为允许虚拟页面与缓存行不对齐或使虚拟页面大小奇数会对虚拟内存体系结构的硬件支持提出更多要求。