为什么C变量在Android 12上有特殊的40位内存地址?



我有这个简单的代码,它打印一个变量的地址到stdout:

#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位地址处理的地址空间。

最新更新