我最近了解到计算机程序实际上并没有使用物理内存地址。相反,我理解操作系统会将物理内存“隐藏”起来供应用程序使用。
这里有一个问题: 指针返回的是物理内存地址还是虚拟内存地址?
如果我执行以下代码,我会得到一个十六进制的地址形式。这只是由操作系统随机分配的数字吗?我还发现数组中元素的地址是连续分配的。这是否意味着数组实际上在RAM中是按“行”排列的,还是可能在稀疏区域中分配它们,而操作系统仅是模拟程序员?
int num = 3;
int arr[3];
printf("address of num: 0x%0x \n", &num);
printf("&arr[0]: 0x%0x \n", &arr[0]);
printf("&arr[1]: 0x%0x \n", &arr[1]);
printf("&arr[2]: 0x%0x \n", &arr[2]);