我尝试在具有不同处理器和主内存大小的一些不同机器上运行此代码。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// your code goes here
int *a, i;
a = (int *)malloc(10*(sizeof(int)));
for(i = 0; i < 10; i++)
{
a[i] = i*i;
}
free(a);
a = (int *)malloc(10*(sizeof(int)));
for(i = 0; i < 10; i++)
{
printf("%d\n",a[i]);
}
free(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然而,在所有机器中它都会生成相同的输出:
0
1
4
9
16
25
36
49
64
81
Run Code Online (Sandbox Code Playgroud)
我的问题是:变量“a”是否应该始终分配使用相同的内存位置来执行?
从理论上讲,可能不是强制性的。如果我的理解是正确的:“a”的每个 malloc 都可以分配不同的基地址。
然而,现代计算机在实践中实际发生了什么?