1. 程式人生 > >arm下堆和棧的增長方向

arm下堆和棧的增長方向

通過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上同樣可以得到上面的結果