首先看一张内存分布图:
1.栈
栈底处于高地址,而栈顶处于低地址。由此可知栈分配内存大致是按照由高址到低址分配。
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[4];
char b[4];
char c[4];
printf("addr_a = %x\n",a);
printf("addr_b = %x\n",b);
printf("addr_c = %x\n",c);
system("pause");
return 0;
}
因为在函数中定义的局部变量会在栈中分配,定义了3个字符数组a,b,c,分别输出他们的首地址。输出结果如下:
addr_a = 12ff44
addr_b = 12ff40
addr_c = 12ff3c
果然,addr_a - 4 = addr_b,addr_b - 4 = addr_c。a,b,c依次由高址向低址分配。
不过,这里需要注意两个问题:
(1)要注意有地址对齐,如果是char a[2],b[2]。a和b的首地址还是会相差4。