gpt4 book ai didi

c - 堆栈和堆上的内存位置模式

转载 作者:太空狗 更新时间:2023-10-29 15:04:37 25 4
gpt4 key购买 nike

我很好奇堆栈和堆上变量(指针)的地址长度之间是否存在任何相关性。在很多情况下,我已经看到与堆相比,关于堆栈变量的那些通常更长。例如考虑以下简单测试:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i = 0;
int *j = malloc(sizeof(int)); *j = 0;

printf("&i = %p\n j = %p\n", &i, j);

free(j);
return 0;
}

输出:

&i = 0x7fffe9c7fa5c
j = 0x100e010

这些结果是在 linux 中使用 gcc 获得的;这可能取决于操作系统/编译器吗?

最佳答案

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

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

然而,堆通常会向上生长,向下堆叠。此外,出于性能和内存管理的原因,堆和堆栈都将始终从 page 开始。边界。

关于c - 堆栈和堆上的内存位置模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com