Android 手机 的童鞋们可能经常会有这样的疑问,为什么我的G2手机明明是256M的内存,可用任务管理器或者free之类的命令,看到的实际值会远远小于256。看到网上的很多误导言论,这里我给大家澄清一下吧:

无图无真相,贴张MSM7627的内存分布图,一目了然:

Android


由上图可以看到,内存主要分给modem/bootloader/SMEM/pmem/Android几个部分使用:

1、modem/bootloader/SMEM部分一般会占用40M~50M的内存,上图占用了43M。这部分主要用于跑AMSS、bootloader及RPC。如果你有源码的话,可以在device\qcom\msmxxx/Boardconfig.mk看到。还有一种方法,可以用adb pull /proc/config.gz .将config.gz文件dump下来,里面可以看到分配给linux的内存大小,用物理内存总大小减去这部分,就可以得到这部分的内存总开销。

2、Pmem一般会占用40M的内存,上图占用了38M左右。系统的framebuffer\mdp\video等都会用到这部分memory。如果你有源码的话,可以在kernel/arch/arm/mach-msm/Board-xxx.c文件中看到Pmem的分配情况。譬如:

#define MSM_PMEM_MDP_SIZE 0x1B76000

#define MSM_PMEM_ADSP_SIZE 0xAE4000

#define MSM_PMEM_AUDIO_SIZE 0x5B000

#define MSM_FB_SIZE 0x177000

#define MSM_GPU_PHYS_SIZE 0x177000

#define PMEM_KERNEL_EBI1_SIZE 0x1C000

3、最后是给用户空间使用的memory,用free或者cat /proc/meminfo等命令看到的是这部分的memory大小。大小是之前第一步传给linux kernel的memory大小减去pmem的占用部分再减去linux kernel和ramdisk大小。

更多相关文章

  1. 键盘打开时,带有片段的活动不会调整大小
  2. Android中的内存储、外存储概念、文件操作与PC端的有些不同
  3. Android中如何查看内存(下)
  4. DialogFragment自定义dialog的位置和大小
  5. java基础---多线程---java内存模型
  6. java基础中一些值得聊的话题(内存篇)
  7. Java区分大小写字母数字和符号
  8. 为内存密集型应用程序增加JVM最大堆大小
  9. 如何在Apache POI(java)中读取.docx中的字体大小和字体名称

随机推荐

  1. Mac 10.12 快速下载 Android 源码
  2. Android关于SD卡的读写操作及固定图片大
  3. Android(安卓)DLNA
  4. 解决 Android模拟器无法上网问题——Host
  5. android UDID获取:android 设备SN的获取
  6. android中自定义播放器的实现
  7. 访问本地服务器
  8. Android 中的布局方式之线性布局
  9. 极光推送使用实例(三) Android客户端
  10. Android内存泄漏监测(MAT)及解决办法