我知道数组元素在虚拟内存中是连续的,但它们在物理内存中也是这样吗?
#define N 100*1024*1024
int arr[N];
请注意,到目前为止,大多数人都说答案是否定的,但我的主要问题如下粗体所示。
如果不是这样,至少如果在页面中找到一个元素,那么我可以假设整个页面都填充了数组元素(换句话说,它们可能不连续,而是在不同页面中,但在每个单独的页面中是连续的,因此当读取1个元素时,我们读取附近元素的整个页面,即4096字节,而不是为下一个元素读取另一页,从而提高性能)?
如果是,请问,如果我试图分配一个大数组,而没有可用的连续物理内存(我认为这经常会发生),该怎么办?
如果答案取决于编程语言,我对C和C ++感兴趣,如果它取决于操作系统,我对linux及其变体(如ubuntu)感兴趣。