gpt4 book ai didi

c++ - 当您调用 new[] 为 N 个整数分配一个数组时,是否保证该数组将按顺序分配到物理内存中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:17 24 4
gpt4 key购买 nike

据我了解,每个计算机程序总是使用虚拟内存,而处理物理内存的方式取决于操作系统。

我正在参加一个算法工程类(class),在某个时候有人提到,如果缓存内存是无限的并且一个缓存行的大小为 B 那么预计会发生的缓存未命中数如果您只想扫描 N 元素的数组,则为 N/B

我可以看出这在理论上是如何工作的,因为我们假设 N 元素在物理内存中一个接一个地放置。

但是,这实际上是真的吗?如果虚拟内存是顺序分配的,那是否也意味着物理内存也将是顺序分配的?

在我看来,在实践中,假设 N 不大于缓存大小,如果 N 元素未在物理内存 (RAM) 中按顺序分配。

也许我误解了虚拟内存和物理内存之间的区别,我不确定。

最佳答案

正如你所说:数组元素在虚拟内存中是连续的,但在物理内存中不一定。

在类似 PC 的架构中,内存以页为单位进行分配,页通常比缓存行大得多(通常是几千字节而不是几十字节)。每个页面将连续的虚拟内存范围映射到连续的物理内存范围。因此每个缓存行仍将跨越物理内存的连续范围,并且物理内存中的不连续性不会导致任何额外的缓存未命中。

关于c++ - 当您调用 new[] 为 N 个整数分配一个数组时,是否保证该数组将按顺序分配到物理内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29256032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com