变量的类型
- 自动变量: auto
- 默认的局部变量都是auto
- 静态变量: static
- 默认的全局变量都是static
- 寄存器变量: register
变量的申请
- 当申明一个变量时, 编译器会将指定的一块内存空间与变量名进行绑定
- 变量名只是内存空间的别名(给编译器看的)
变量的操作
- 取出地址内的值
- 修改值
- 将值写入地址
1
2int a = 10;
a += 4;
1 | push ebp ;保存ebp |
指针变量
指针变量存储的是内存地址
1 | int a = 5; |
1 | mov dword ptr ss:[ebp-8],5 ;ebp-8是变量a的地址, 赋值5 |
其它
- 将esp赋值给ebp, 使用ebp作为栈基并以[ebp+??]来访问函数的参数, 以[ebp-??]来访问函数的变量
- 栈空间是有限的, 如果只分配不还原(比如无限递归), 最终将溢出
- 由于函数的调用, 栈指针(esp)是不断变化的(每个函数都要使用栈空间(sub)), 所以为了方便调试使用了ebp