栈增加地址由高往低,堆由低往高函数
不只struct 要对齐,以前就以为奇怪,struct对齐的好处,栈这些怎么就没有,如今验证了,的确也有,不过对齐规则不太同样,栈临时变量也要对齐测试
在关闭RTC 检查后,如下测试代码VS2013下code
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个变量,因为是小端因此左往右看im
若是开了RTC 那么会多分配几个字节,来检查,直观看来,全是cc的img
图中上往下地址增长,咱们再看看下面代码co
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;struct
溢出的往高地址写
若是在加入函数的调用
变量存放位置往栈增加的方向
win下的G++ 也同样