栈变化
栈增长地址由高往低,堆由低往高
不仅struct 要对齐,之前就觉得奇怪,struct对齐的好处,栈这些怎么就没有,现在验证了,的确也有,不过对齐规则不太一样,栈临时变量也要对齐
在关闭RTC 检查后,以下测试代码VS2013下
int a = 32; int b = 0; int c=32; cout << (int)&a - (int)&a << endl; cout << (int)&b - (int)&a << endl; cout << (int)&c - (int)&b << endl;
没问题, 4 4 4 字节直接但是如果把b换为char了呢
输出就是0 -1 -7 了,很明显char 依然被分配了4字节栈内存
20 00 00 00 ,00 00 00 00, 20 00 00 00 是这3个变量,由于是小端所以左往右看
如果开了RTC 那么会多分配几个字节,来检查,直观看来,全是cc的
图中上往下地址增加,我们再看看下面代码
int a = 32; char b[100] ; int c=32; memset(b, 0x0f, 110); cout << (int)&a - (int)&a << endl; cout << (int)&b - (int)&a << endl; cout << (int)&c - (int)&b << endl;
b溢出,多出来的10字节会往上覆盖掉c的2字节,因为RTC检查分配8字节。c的低端2字节会被写为0x0f;
溢出的往高地址写
如果在加入函数的调用
变量存放位置往栈增长的方向
win下的G++ 也一样