首先,对于一个32位的处理器, 在Linux系统中,其虚拟地址为32位,因此其虚拟地址空间的范围为

da24fe2b3234

一个可执行文件运行起来的话它就变成了进程,系统会给每个进程分配一个4G大小的虚拟地址空间。如果一个Android设备是8g内存,给每个进程分配4g实际内存是不可能的。

Linux系统将虚拟地址空间按3:1比例划分,其中用户空间(user space)占3GB,内核空间(kernel space)占1GB。

da24fe2b3234

https://blog.csdn.net/czc1997/article/details/81159126

其中前3G内存是用户空间,最后1G是内核空间。所有的进程有各自的用户空间,但所有的进程都共享一个内核空间。

出处:Android系统中的进程管理:进程的创建

在Android系统中,进程可以大致分为系统进程和应用进程两大类。

系统进程是系统内置的(例如:init,zygote,system_server进程),属于操作系统必不可少的一部分。

应用进程是指应用程序运行的进程。这些应用程序可能是系统出厂自带的(例如Launcher,电话,短信等应用),也可能是用户自己安装的(例如:微信,支付宝等)。

下面我们只看应用进程。

一般情况下来说,一个app,对应一个进程,系统会分配给这个进程分配一个4g(处理器是32位的情况下)的虚拟空间,如下所示。

da24fe2b3234

但是,对于系统应用很常用的一个属性就是android:sharedUserId。

android:sharedUserId的作用是多个应用程序,可以共享同一进程中的用户空间(如android.uid.phone或android.uid.system),例如下面的AndroidManifest,分别是3个应用中的AndroidManifest。

xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"

package="com.android.phone"

coreApp="true"

android:sharedUserId="android.uid.phone"

android:sharedUserLabel="@string/phoneAppLabel"

>

package="com.android.simmelock"

android:sharedUserId="android.uid.phone">

package="com.android.stk"

android:sharedUserId="android.uid.phone">

phone,simmelock以及stk这3个app,使用的sharedUserId都是android.uid.phone,因此这3个应用程序,在实际运行中,这种情况下app之间可以数据共享,因为都是运行在同一用户空间中。

虚拟空间如下所示。

da24fe2b3234

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐