gpt4 book ai didi

c++ - 数组在*物理*内存中是连续的吗?

转载 作者:行者123 更新时间:2023-12-04 11:50:05 40 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Are the physical memory addresses of an array also stored in order like the virtual ones?

(2 个回答)



Are std::vector elements contiguous in physical memory?

(3 个回答)


3个月前关闭。




我知道数组元素在虚拟内存中肯定是连续的,但它们是 物理像这样的内存?

#define N 100*1024*1024
int arr[N];

请注意,到目前为止,你们中的大多数人都说答案是否定的,但我的主要问题仍然是下面以粗体显示的问题。

如果没有,至少如果在页面中找到一个元素,那么我可以假设整个页面都填充了数组元素 (换句话说,它们在不同的页面中可能不是连续的,而是在每个单个页面中连续的,从而在读取 1 个元素时提高性能,我们读取附近元素的整页,即 4096 字节,而不是为下一个元素读取另一页)?
如果是,如果我尝试分配一个没有可用连续物理内存的大数组怎么办(我相信这可能会发生很多)?
如果答案取决于我对 C 和 C++ 感兴趣的编程语言,如果它取决于我对 linux 感兴趣的操作系统及其变体,例如 ubuntu

最佳答案

在 Linux x86 上,连续的虚拟内存以 4 KB 的页面分配:

根据定义,内存在 page 内是连续的。但是物理页面可以按任何顺序映射。只要物理页面(或交换空间)可用,操作系统就可以分配和释放任何数量的虚拟内存。页级别的碎片不是 CPU 或缓存的问题,但会影响分配性能,因此 Linux 页分配算法不断发展,如 this article 中所述。 .
这意味着一个大的连续数组将以 4 KB 的块(对齐到 4 KB)驻留在 RAM 中。第一个和最后一个块可能会占据页面的一部分,其余的将占据整个页面。

关于c++ - 数组在*物理*内存中是连续的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68228499/

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