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