【发布时间】:2021-09-14 14:29:13
【问题描述】:
我知道数组元素在虚拟内存中是连续的,但它们是否像这样的物理内存?
#define N 100*1024*1024
int arr[N];
请注意,到目前为止,你们中的大多数人都说答案是否定的,但我的主要问题还是下面的粗体字。
如果不是,至少如果在页面中找到一个元素,那么我可以假设整个页面都充满了数组元素(换句话说,它们在不同页面中可能不连续但在每个单页中都是连续的,因此在读取 1 个元素时提高了性能,我们读取了附近元素的整页,即 4096 字节,而不是为下一个元素读取另一页)?
如果是,如果我尝试分配一个没有可用连续物理内存的大数组(我相信这种情况经常发生)怎么办?
如果答案取决于我对 C 和 C++ 感兴趣的编程语言,如果它取决于我对 linux 及其变体(如 ubuntu)感兴趣的操作系统
【问题讨论】:
-
物理内存对虚拟内存系统中的程序是不可见的——作为程序员,您不需要对此进行推理。
-
@daniel 是的。 “页面中所有连续的内容对于虚拟内存和物理内存都是连续的”。这是您获得的唯一保证。
-
连续内存和非连续内存之间没有性能差异。这就是随机访问的意思。
-
@GSerg 这不是我问的...我问它们是否是连续的物理内存,它们是否会在同一页面中连续... A 是 B 并没有说 B 是 A
-
@GSerg 它不会“物理内存中连续的项目”这不是我要再次要求的。我在问它们是否在虚拟内存中是连续的......
标签: c++ arrays c memory memory-management