Arrays 当我们更改A[i][j]的值时,是否需要加载整个A[i]数组?

Arrays 当我们更改A[i][j]的值时,是否需要加载整个A[i]数组?,arrays,virtual-memory,Arrays,Virtual Memory,或者系统是否只需要将[i]加载到虚拟内存中即可更改[i][j]的值?在大多数情况下,这是不必要的。但是,由于虚拟内存操作是在页面级别执行的,因此系统将至少加载一个页面。阵列通常被分配为一个连续的内存块,每个元素的大小固定。数组变量指向该内存块中的第一个位置。当您指定索引时,数组访问器将跳转那么多内存块,这就是它通过索引快速访问元素的方式。数组是通过引用(即指向第一个内存位置的指针)传递的。很大程度上取决于您使用的语言、加载方式(通过值或引用)等。代码在哪里?什么是“加载整个数组”?通常,阵列始终

或者系统是否只需要将[i]加载到虚拟内存中即可更改[i][j]的值?

在大多数情况下,这是不必要的。但是,由于虚拟内存操作是在页面级别执行的,因此系统将至少加载一个页面。

阵列通常被分配为一个连续的内存块,每个元素的大小固定。数组变量指向该内存块中的第一个位置。当您指定索引时,数组访问器将跳转那么多内存块,这就是它通过索引快速访问元素的方式。数组是通过引用(即指向第一个内存位置的指针)传递的。

很大程度上取决于您使用的语言、加载方式(通过值或引用)等。代码在哪里?什么是“加载整个数组”?通常,阵列始终在内存中(它们没有基于磁盘的存储或任何支持),因此在访问
A[i][j]
的任何时候都不会加载任何内容。我想你可以计算两个指针被取消引用(
(A+I)
(*(A+I)+j)
)。那么,虚拟内存页可以交换到硬盘上。但是,这只适用于非常大的阵列(内存空间很大)。