我在64位linux下使用C++,編譯器(g ++)也是64位。當我打印一些變量的地址,例如一個整數時,它應該打印一個64位整數,但實際上它會打印一個48位整數。64位機器上的C++指針
int i;
cout << &i << endl;
output: 0x7fff44a09a7c
我想知道另外兩個字節在哪裏。期待你的幫助。
謝謝。
我在64位linux下使用C++,編譯器(g ++)也是64位。當我打印一些變量的地址,例如一個整數時,它應該打印一個64位整數,但實際上它會打印一個48位整數。64位機器上的C++指針
int i;
cout << &i << endl;
output: 0x7fff44a09a7c
我想知道另外兩個字節在哪裏。期待你的幫助。
謝謝。
在大多數C++實現中打印地址會抑制前導零以提高可讀性。像0x00000000000013fd
這樣的東西並沒有真正增加價值。
當你想知道爲什麼在用戶空間中通常看不到超過48位的值時,這是因爲當前的AMD64體系結構被定義爲具有48位的虛擬地址空間(如在Linux上可以看到cat /proc/cpuinfo
)
爲了好玩,你可以使用C的輸出,看看它更像是你後:
printf("0x%p");
多少位沒有'數1'有哪些?你會抱怨'uint32_t x = 1;'沒有足夠的位?你應該檢查'sizeof(* int)'而不是打印東西。 –