我有這個簡單的代碼,它將變數的地址列印到標準輸出:
#include <stdio.h>
int main()
{
int a=0;
printf ("Address of a: %p", (void*)&a);
return 0;
}
在 Android 11(32 位作業系統)設備上執行此代碼會產生如下輸出:
Address of a: 0xffd7458c
正如預期的那樣,這是一個 32 位記憶體地址。
但是在 Android 12(據我所知,64 位作業系統)設備上執行此代碼會得到如下輸出:
Address of a: 0x7fdfee014c
這是一個不尋常的 40 位記憶體地址。
所以我的問題是,Android 12 上的記憶體地址不應該是 64 位(即類似的東西0x7fdfee014c346a5f),因為它是 64 位作業系統嗎?
詳細的解釋將不勝感激。
uj5u.com熱心網友回復:
除非您的 64 位 Android 手機具有 18 EXA 位元組的記憶體(即 180 億 GB),否則記憶體映射將是稀疏的。看起來您的記憶體(RAM?)被映射到由 40 位地址處理的地址空間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/487164.html
上一篇:將字符以矩陣形式放入二維陣列中
下一篇:如何讓前處理器宏在編譯前評估代碼
