棧堆地址高低次序問題

結論:

一、a地址大於b地址大於c地址驗證棧是由高到低分配地址的(先進後出),c地址小於f地址小於e地址驗證堆地址分配是無序的(先進先出)

二、無論堆或者棧,數組的內存的高低位都是由低到高的。原因即申請d[10]或者e時,是一次性申請的,而不是分十次申請的,這點不違反第一個結論。(這是我寫此文的很重要的原因)

直接上測試代碼:

int main()
{
	printf("*************** 棧 ***************\n");
	int a;
	int b;
	printf("a=%x,b=%x\n", &a, &b);

	int d[10];
	for (int i = 0; i < 10; i++)
	{
		printf("d[%d]=%x\n", i, &d[i]);
	}

	printf("*************** 堆 ***************\n");
	int* c = new int;
	printf("c=%x\n", c);

	int *e = new int[10];
	for (int i = 0; i < 10; i++)
	{
		printf("e[%d]=%x\n", i, &e[i]);
	}

	//delete c, c = nullptr;
	int *f = new int;
	printf("f=%x\n", f);

    return 0;
}

運行結果:

*************** 棧 ***************
a=93fb6c,b=93fb60
d[0]=93fb30
d[1]=93fb34
d[2]=93fb38
d[3]=93fb3c
d[4]=93fb40
d[5]=93fb44
d[6]=93fb48
d[7]=93fb4c
d[8]=93fb50
d[9]=93fb54
*************** 堆 ***************
c=e509c8
e[0]=e51468
e[1]=e5146c
e[2]=e51470
e[3]=e51474
e[4]=e51478
e[5]=e5147c
e[6]=e51480
e[7]=e51484
e[8]=e51488
e[9]=e5148c
f=e508d8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章