栈变化

栈增加地址由高往低,堆由低往高函数

不只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++ 也同样

相关文章
相关标签/搜索