簡體   English   中英

64位計算機上的C ++指針

[英]c++ pointer on 64 bit machine

我在64位Linux下使用c ++,編譯器(g ++)也是64位。 當我打印某個變量(例如整數)的地址時,應該打印一個64位的整數,但實際上它打印的是48位的整數。

int i;
cout << &i << endl;

output: 0x7fff44a09a7c

我想知道其他兩個字節在哪里。 期待您的幫助。

謝謝。

在大多數C ++實現中,地址的打印會抑制前導零,從而使內容更具可讀性。 0x00000000000013fd這樣的東西並不能真正增加價值。

當您想知道為什么在用戶空間中通常看不到超過48位的值時,這是因為當前的AMD64架構僅定義為具有48位的虛擬地址空間(例如,在Linux上的cat /proc/cpuinfo可以看到)

它們在那里-他們什么都沒走-只是流中的格式。 它跳過前導零(檢查流的填充和寬度屬性)。

編輯:再三考慮,我不認為有一種改變默認operator<<指針格式的好方法。 如果使用std::hex操縱器進行流輸出,則可以更改fill和width屬性。

為了好玩,您可以使用C輸出,看看它是否更像您想要的:

printf("0x%p");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM