棧增加地址由高往低,堆由低往高函數
不只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++ 也同樣