android进程地址空间,进程与虚拟空间简单理解

首先,对于一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值