两个基本点:
1.变量变量,能变,就是能读能写,必定在内存里
2.指针指针,保存的是地址,32位处理器中地址都是32位的,无论是什么类型的指针变量,都是4字节
程序实验1
int main()
{
volatile int a;
volatile char b;
volatile char buf[100];
volatile int *p;
volatile char *p1;
a = 1;
b= 'd';
buf[38]= 'g';
while(1)
{
}
}
volatile:易变的意思
所有的变量 a,b,p,p1都是局部变量,存放在栈里面,使用之后就释放了,在编译文件.map找不到上述变量的信息:如上图
程序实验2
int a;
char b;
char buf[100];
int *p;
char *p1;
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main()
{
a = 1;
b= 'd';
buf[38]= 'g';
while(1)
{
}
}
变量变为全局变量之后,就可以在编译文件.map找到上述变量的信息,包括存放地址,空间大小等信息:如上图
int类型 占据4字节空间
char :1字节
char buf[100]:100字节(1*100 = 100)
p,p1是指针变量,存放的是地址,32位处理器地址是32位,所以p,p1所占内存空间是4字节:
(只要是指针,无论是int,char还是其他都是32位,4字节)
程序实验3
int a;
char b;
char buf[100];
int *p;
char *p1;
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
int main()
{
while(1)
{
}
}
不使用变量的话,编译器会优化掉变量信息,在编译文件.map找不到上述变量的信息