栈和堆的地址分析

栈和堆的地址分析
栈和堆是内存中的部分。安装地址的变化规则,栈是向下生长的,堆是向上增长的。
这里对栈和堆的地址生长情况做了一个实现。
更好的内容有 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  }

你可能感兴趣的:(栈和堆的地址分析)