2014-12-02 50 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