簡體   English   中英

為什么 C 變量在 Android 12 上具有特殊的 40 位內存地址?

[英]Why do C variables have peculiar 40-bit memory addresses on Android 12?

我有這個簡單的代碼,它將變量的地址打印到標准輸出:

#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 位操作系統嗎?

詳細的解釋將不勝感激。

除非您的 64 位 Android 手機具有 18 EXA 字節的內存(即 180 億 GB),否則內存映射將是稀疏的。 看起來您的內存(RAM?)被映射到由 40 位地址處理的地址空間。

暫無
暫無

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

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