栈
函数 和 局部变量 都要使用到栈。
在经典的操作系统中,栈总是向下增长的。压栈操作使栈顶的地址减小,弹出的操作使栈顶地址增大。
堆栈帧
保存了一个函数调用所需要的维护信息的栈。也称为活动记录。
一般包含以下方面:
1. 函数返回地址和参数;
2. 临时变量:函数的非静态局部变量、编译器自动产生的其他临时变量。
3. 保存的上下文:函数调用前后需要保持不变的寄存器。
Debug模式在第四步里,将所有分配出来的栈空间的每一个字节都初始化为0xCC。0xCCCC的汉字编码就是“烫”。有时是0xCD。0xCDCD的汉字编码是“屯”。
调用惯例
调用惯例 参数压栈 出栈方 名字修饰
cdecl: 从右至左 函数调用方 下划线+函数名
stdcall:从左至右 函数本身 下划线+函数名+@+参数字节数
如果程序中没有涉及到可变参数,最好用__stdcall。
堆
Windows中 VirtualAlloc()用来向系统申请空间(必须为页的整数倍 )。