首页 > 解决方案 > 主函数中的第一个变量地址是否固定?

问题描述

当我试图打印 main 函数中第一个变量的地址时,我发现运行几次后结果总是相同的。为什么?是虚拟内存还是物理内存?

#include <stdio.h>

int main()
{
    int a;

    printf("a's address is %p\n", &a);

    return 0;
}

我预计每次输出都会不同,但实际输出始终是 0028FF3C

标签: c

解决方案


在某些系统上,启用ASLR是有充分理由的。

例如,在我的 Linux/Debian/Sid x86-64 上,您的程序每次都会给出不同的地址:

repeat 10 tmp/sange
a's address is 0x7fff2768303c
a's address is 0x7ffc5d26a57c
a's address is 0x7ffcc0a4b2ac
a's address is 0x7ffeec95fd7c
a's address is 0x7ffefd5318dc
a's address is 0x7ffc544497bc
a's address is 0x7fff232f7dac
a's address is 0x7fff9dd3b65c
a's address is 0x7fff9e6858dc
a's address is 0x7ffc2876d4bc

要了解更多信息,请阅读未定义的行为(例如Lattner 的博客)、未指定的行为,并阅读一本关于操作系统的好教科书,例如操作系统:三个简单的部分(可免费下载)

另请阅读有关虚拟地址空间的信息。


推荐阅读