栈和堆是内存中的部分。安装地址的变化规则,栈是向下生长的,堆是向上增长的。
这里对栈和堆的地址生长情况做了一个实现。
更好的内容有 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 阅读(399)
评论(0) 编辑 收藏 引用