棧和堆是內存中的部分。安裝地址的變化規則,棧是向下生長的,堆是向上增長的。
這里對棧和堆的地址生長情況做了一個實現。
更好的內容有 Computer System:A Programmer's Perspective 《深入理解計算機系統》
1 #include <iostream>
2 using namespace std;
3
4 int main()
5 {
6 int i = 1;
7 int j = 2;
8 int k = 3;
9 cout << &i << endl;
10 cout << &j << endl;
11 cout << &k << endl;
12 // 棧是向下生長的,所以地址遞減
13
14 int a[3];
15 cout << &a[0] << endl;
16 cout << &a[1] << endl;
17 cout << &a[2] << endl;
18 // 棧還是向下生長的,但是對于一個數組來說從第一個元素到后面的元素
19 // 其每個元素的地址是遞增的。所以最后一個元素是在最上面的,也就是
20 // 與前面在棧上定義的元素挨著,第一個元素在最下面
21
22
23 cout << a[3] << endl;
24 cout << a[5] << endl;
25 // 這里 a[5] 輸出 3,a + 5 將達到變量 k 的地址 &k,所以 *(a + 5) = k
26
27
28 int* b = new int[3];
29 cout << &b[0] << endl;
30 cout << &b[1] << endl;
31 cout << &b[2] << endl;
32 // 堆是向上生長的,第一個元素在最下面
33
34 // 不管是在堆還是在棧上的數組,數組中的元素的地址都是隨著元素的位
35 // 置遞增而遞增的。
36 // 只不過在棧上的元素順序與棧的增長方向相反,在堆上數組的元素的順
37 // 序與堆的增長方向相同。
38
39 return 0;
40 }
posted on 2011-05-27 01:00
unixfy 閱讀(402)
評論(0) 編輯 收藏 引用