棧變化

棧增加地址由高往低,堆由低往高函數

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

相關文章
相關標籤/搜索