栈上内存分配探索
1、思考以下代码会输出什么?
{
int a = 1;
int arr[] = {1, 2, 3, 4};
int b = 2;
printf("&a = %p\n", &a);
printf("&arr[0] = %p\n", &arr[0]);
printf("&arr[1] = %p\n", &arr[1]);
printf("&arr[2] = %p\n", &arr[2]);
printf("&arr[3] = %p\n", &arr[3]);
printf("&b = %p\n", &b);
}
1、代码是顺序执行的,栈上首先分配高地址内存空间给变量
==》&a > &arr > &b
2、编译器分配4*sizeof(arr[0])这么大的内存空间给arr,arr表示这段内存的起始地址,arr中元素的地址
是从低往高分配的(便于指针偏移操作)
==》&arr[3] > &arr[2] > &arr[1] > &arr[0]