栈变化

梦想游戏人
目录:
C/C++

栈增长地址由高往低,堆由低往高

不仅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++ 也一样

Scroll Up