arm下堆和棧的增長方向
阿新 • • 發佈:2018-11-10
通過gdb除錯下面的程式,觀察運行於ARM的Linux系統中,heap和stack的區別
#include <cstdio> #include <cstring> struct MyStr { unsigned char ch[128]; MyStr() { memset(ch,0x01,128); } }; int main() { MyStr *pstr1=new MyStr(); MyStr st1; MyStr *pstr2=new MyStr(); MyStr st2; delete pstr1; pstr1=nullptr; delete pstr2; pstr2=nullptr; return 0; }
除錯截圖:
可以發現:
1、pstr1的地址<pstr2
2、st1的地址>st2
3、pstr1、pstr2的地址<st1、st2的地址
so,可以得出:
1、heap的增長方向為向上增長
2、stack的增長方向為向下增長
3、stack位於記憶體高地址區域,而heap位於低地址區域
測試環境:
CPU:ARM Cortex-A53
OS:GNU Debian 9.5 for ARM64,kernel4.14
其實在x86這樣的小端CPU上同樣可以得到上面的結果