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

Gra*_*Guy 5 c pointers

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

&i = 0x7fffe9c7fa5c
 j = 0x100e010
Run Code Online (Sandbox Code Playgroud)

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

phi*_*hag 2

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

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

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