[英]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.