我有这个简单的代码,它打印一个变量的地址到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位地址处理的地址空间。