posts - 183,  comments - 10,  trackbacks - 0
栈和堆是内存中的部分。安装地址的变化规则,栈是向下生长的,堆是向上增长的。
这里对栈和堆的地址生长情况做了一个实现。
更好的内容有 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 << &<< endl;
10     cout << &<< endl;
11     cout << &<< 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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理