2014-12-02 52 views
-4

我在64位系统上,并在Visual Studio中我得到了下面这段代码如下输出..Visual Studio中,解释变量

#include <iostream> 
using namespace std; 
int main() 
{ 
    int asdf = 32; 
    cout << &asdf; 
} 

00ACF88C 

在GCC与-m32我得到测试的东西的地址0xfffc1828。这两个地址有什么区别? 0xff是否与00相同?这些逻辑或物理地址是?

+2

@ user4314270:编译器可自由编排堆栈内存,但它喜欢,所以地址不匹配是完全没有意外的。这没有实际的结果。如果你有地址的使用,只需要用'&'和它是对的(即你可以解引用它以后引用'asdf')。你可以信任编译器来确保。比利的讽刺对你的问题来说是一个相当合理的比喻。 – 2014-12-02 05:13:56

+0

不......你看到我的评论是高于一个 – user4314270 2014-12-02 05:21:40

回答

1

变量放置的地址完全取决于实现。这些地址没有什么特别之处,除了这是编译器和平台决定用来在运行程序的特定时间存储特定整数的地址。

在具有虚拟内存的系统上,大部分您可以访问的地址(除非您正在编写内核的内存管理单元)将成为虚拟地址。

+0

为什么输出看起来不一样?例如0xff – user4314270 2014-12-02 05:13:55

+0

@user:因为不同的标准库实现选择实现“将指针地址写入控制台”函数的方式稍有不同。 – 2014-12-02 05:15:01