use*_*595 3 c arrays computer-architecture
我对编程比较陌生,所以当有人建议构建一个结构数组(每个包含特定"item"的n个属性)比构建n个属性数组更快时,我发现我对数组知之甚少以某种方式争论.
我看了这个:
和
但我仍然不太了解C程序如何通过索引从数组中检索特定值.
很明显,数组的数据元素存储在内存中相邻,并且数组名称指向第一个元素.
C程序是否足够聪明,可以根据数据类型和索引进行算术运算,以确定目标数据的确切内存地址,或者程序是否必须以某种方式迭代每个中间数据到达之前(如链表数据结构)?
更重要的是,如果程序通过其内存地址请求一条信息,那么机器如何找到它?
我们来看一个更简单的例子.假设你有一个数组int test[10],这个数据存储在地址1000:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
编译器知道,例如,int是4个字节.数组访问公式是这样的:
baseaddr + sizeof(type)*index
结构的大小只是其元素大小加上编译器添加的任何填充的总和.所以这个结构的大小:
struct test {
int i;
char c;
}
Run Code Online (Sandbox Code Playgroud)
可能是5.它也可能不是,因为填充.
至于你的上一个问题,很快(这是非常复杂的)MMU使用页面表将虚拟地址转换为物理地址,然后请求该物理地址,如果它在缓存中,则返回,否则从主要地址获取记忆.