and*_*red 5 c memory-management
我有这个小程序:
#import <stdio.h>
#import <stdlib.h>
void main(void) {
char a;
char b;
printf("Adress a: %p\n", (void *)&a);
printf("Adress b: %p\n", (void *)&b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
b的地址低于b的地址.为什么会这样?或者我做错了什么?
局部变量的存储空间位于栈上。X86 处理器系列有一个“向下增长”的堆栈。这意味着当分配发生时(例如分配变量),堆栈指针向下移动到较低的内存地址。
&a大于是&b因为&a分配后,堆栈指针向下移动到较低的地址以进行下一次分配。