printf("%p", p);输出的是指针的地址,那么这个值是偏移地址吗?
假设printf输出的值是0028FEF8,如果这个值是偏移地址的话,那么偏移地址就是8*4=32位。如果还按照段地址加偏移地址来寻址的话,那么cpu的最大寻址能力就是2^33=16GB。可是我的cpu和操作系统都是64位的,CPU的最大寻址能力应该是2^64啊,怎么就不对了呢?我觉得可能的答案有两个:
1.printf输出的不是偏移地址或者输出的不是偏移地址的全部位数
2.64位CPU不再按照段地址+偏移地址来寻址。
求大神解答!
程序代码:
int main(){ int a[5] = {1, 2, 3, 4, 5}; int *p = a; printf("%p", p); //输出0028FEF8 return 0; }