結論:
一、a位址大於b位址大於c位址驗證棧是由高到低分配位址的(先進後出),c位址小於f位址小於e位址驗證堆位址分配是無序的(先進先出)。
二、無論堆或者棧,陣列的記憶體的高低位都是由低到高的。原因即申請d[10]或者e時,是一次性申請的,而不是分十次申請的,這點不違反第乙個結論。(這是我寫此文的很重要的原因)
直接上測試**:
int main()
printf("*************** 堆 ***************\n");
int* c = new int;
printf("c=%x\n", c);
int *e = new int[10];
for (int i = 0; i < 10; 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
關於棧混洗出棧次序問題
void permutation stackbylistpermutationarray 並走另一條路徑。p data false 如果是第乙個位置,並且當前分支已經走過。if p isleft.first p data break 跳出迴圈 重置位置與各容器。p isleft.first obje...
關於堆與棧的區分問題
堆與棧的區分問題,似乎是乙個永恆的話題,由此可見,初學者對此往往是混淆不清的,所以我決定拿他第乙個開刀。首先,我們舉乙個例子 void f 這條短短的一句話就包含了堆與棧,看到new,我們首先就應該想到,我們分配了一塊堆記憶體,那麼指標p呢?他分配的是一塊棧記憶體,所以這句話的意思就是 在棧記憶體中...
堆和棧記憶體擴充套件方向問題
棧 在windows下,棧是向低位址擴充套件的資料結構,是一塊連續的記憶體的區域。這句話的意 思是棧頂的位址和棧的最大容量是系統預先規定好的,在windows下,棧的大小是2m 也有 的說是1m,總之是乙個編譯時就確定的常數 如果申請的空間超過棧的剩餘空間時,將 提示overflow。因此,能從棧獲...