c/c++语言开发共享堆栈和堆上的内存位置模式

如果堆栈上的变量(指针)的地址长度与堆之间存在任何关联,我只是好奇。 在很多情况下,我发现与堆相比,堆栈变量通常更长。 例如,考虑以下简单测试:

#include  #include  int main(void) { int i = 0; int *j = malloc(sizeof(int)); *j = 0; printf("&i = %pnj = %pn", &i, j); free(j); return 0; } 

输出:

 &i = 0x7fffe9c7fa5c j = 0x100e010 

这些结果是在linux下使用gcc获得的; 这可能是OS /编译器依赖的吗?

    结果取决于程序地址空间中堆(s)和堆栈的位置。 这些由链接器和处理器体系结构决定。

    由于ASLR ,现代系统上的确切数字应该是随机的。

    然而,堆通常会向上增长,并向下堆积。 此外,出于性能和内存管理的原因,堆和堆栈将始终在页面边界上开始。

    我相信这是因为内存的物理部分我们认为它们被称为堆栈和堆。 因为它们从相对的两端开始并向中间生长,所以一个较低而另一个较高是有意义的。 如果在堆栈上分配2个连续变量并在堆上分配2个连续变量,那将会很有趣。 这有助于了解堆栈和堆的增长方式。 实际上我觉得为了这个工作你需要创建一个新的堆栈框架(一个新方法)并在那里分配第二个变量,否则你将保持在同一个堆栈框架中。

      以上就是c/c++开发分享堆栈和堆上的内存位置模式相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560045.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐