看下面一段代码

 

 
  1.  
    #include<bits/stdc++.h>
  2.  
    using namespace std;
  3.  
    int main()
  4.  
    {
  5.  
    int a,b; //栈
  6.  
    printf("%x\n%x\n",&a,&b);
  7.  
    int *c = new (int ); //堆
  8.  
    printf("%x\n",c);
  9.  
    }
 

运行结果:

堆与栈的内存地址相对高低


我也有这样的疑问,记得学习的计算机组成原理上都说栈在高地址往低处增长,堆在低地址往高处增长,

堆与栈的内存地址相对高低

那么实际情况到底如何呢?

直到看到知乎:

https://www.zhihu.com/question/36103513?sort=created

总结一下:

1. 至于数组元素与栈的增长方向:C与C++语言规范都规定了数组元素是分布在连续递增的地址上的。

2. Windows上不应该对栈和堆的相对位置做任何假设

 

附上一个讲解内存管理的写的很好的博客:

http://kb.cnblogs.com/page/66608/

 


---------------------
作者:清楼小刘
来源:CSDN
原文:https://blog.csdn.net/qq_33826977/article/details/66476289
版权声明:本文为作者原创文章,转载请附上博文链接!

相关文章: