编写基本的东西(使用C语言)时:
int myNumber;
myNumber = 3;
printf("Here's my number: %d", myNumber);
我发现(主要是在32位CPU上),整数占用32位即4个字节。因此,在我的代码的第一行,CPU进入内存。内存是按字节寻址的,因此CPU选择4个连续的字节来存储我的变量,并将地址存储到第一个(或最后一个)字节中。
在我的代码的第二行,CPU使用存储的MyNumber变量地址,进入内存并找到32位保留空间。它的任务现在是在那里存储数字“3”,因此它用序列00000000-00000000-00000000-00000011填充这四个字节。在第三行,它做同样的事情- CPU进入内存中的那个地址,并加载存储在该地址中的数字。
(第一个问题-我是否理解得正确?)
我不明白的是:
32位CPU的地址大小(指向该变量的指针)为4个字节。(这就是为什么32位CPU最多只能使用4GB的内存-因为只有2^32个不同的地址,二进制长度为32)
现在,CPU把这些地址存储在哪里?它是否具有自己的内存或高速缓存来存储它们?为什么它将32位长的地址存储到32位长的整数中呢?如果大小相同,将实际数字存储在其缓存中是否更好?
最后一个问题-如果它在自己的高速缓存中存储所有这些整数的地址,并且长度相同(4个字节),则需要与实际变量相同的空间来存储地址。但是变量可以占用多达4GB的空间,因此CPU必须具有4GB的自己的空间来存储这些变量的地址。听起来很奇怪。
谢谢帮助!
我正在努力理解这个问题,但它太困难了。