ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> IOS开发 >> DEAD in iOS Memory

DEAD in iOS Memory(1/8)

来源:网络整理     时间:2018-10-31     关键词:

本篇文章主要介绍了" DEAD in iOS Memory",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: 虚拟内存的来由一个系统中的进程是与其他进程共享CPU和主存资源的,最开始我们直接访问物理内存地址,但是后来我们发现会造成各种各样的问题:地址空间不隔离 所有的进...

虚拟内存的来由

一个系统中的进程是与其他进程共享CPU和主存资源的,最开始我们直接访问物理内存地址,但是后来我们发现会造成各种各样的问题:

  1. 地址空间不隔离 

    所有的进程都可以直接访问物理地址,那表明各个进程的内存空间不是互相隔离的。有些恶意的进程或者被注入恶意代码的进程非常容易去改写其他进程的内存数据,以达到破坏的目的。

  2. 内存使用效率低 

    由于没有有效的内存管理机制,需要一个程序执行时,会将整个程序装入内存中然后开始执行。如果我们这个时候突然想要运行另外一个程序,那么很可能遇到内存空间不足。这时候有一种处理方法是将其他程序的数据暂时写到磁盘里面,等到用的时候再读回来。由于程序所需要的空间是连续的,那么在这个方法里,如果我们将程序A换出到磁盘所释放的内存空间是不够的,所以接着会将程序B换出到磁盘,然后将程序C读入到内存开始运行。我们可以看出来,整个过程中有大量的数据在换入换出,导致效率十分低下。

  3. 程序运行的地址不确定 

    因为程序每次需要装入运行时,我们需要给它从内存中分配一块足够大的空闲区域,这个空闲区域的位置是不确定的。这给程序员的编写造成了一定的麻烦,因为程序在编写时,它访问数据和指令跳转的目标地址很多都是固定的,需要重定向。

这时候,就产生了一种解决方案,一种对主存的抽象概念,叫做 虚拟内存(Virtual Memory/VM,下文中为了简便可能会使用缩写) 。

虚拟内存的作用

虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。

虚拟内存提供可三个重要的功能:

  1. 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据;

  2. 它为每个进程提供了一致的地址空间,从而简化了内存管理;

  3. 它保护了每个进程的地址空间不被其他进程破坏。

VM是沉默的、地中的工作,不需要开发人员的任何干涉。但是,我们依然要注意它,原因有三:

  1. 虚拟内存是核心的

    VM遍及计算机系统的所有层面,在硬件异常、汇编器、链接器、加载器、共享对象、文件和进程的设计中扮演着重要的角色。理解VM将帮助开发者更好的理解系统通常是如何工作的。(尤其是在iOS开发中!)

  2. 虚拟内存是强大的

    VM给予了应用程序强大的能力,可以创建和销毁内存片、将内存片映射到磁盘文件中的某个部分(mmap),以及与其他进程共享内存。理解VM将帮助你利用它的强大功能在应用程序中添加动力。

  3. 虚拟内存是危险的

    每次应用程序引用一个变量、间接引用一个指针,或者调用一个诸如malloc这样的动态分配程序时,它就会和VM发生交互。如果VM使用不当,应用将遇到复杂危险的与内存有关的错误。理解VM可以帮助开发者规避这种错误。

寻址方式

计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址(Physical Address)。第一个字节的地址为0,下一个为1,在往下是2,以此类推。直接通过物理地址访问内存的方法就是 物理寻址。原理 如下图:

而现在除了嵌入式设备和某些超级计算机意外,我们使用 虚拟寻址来取代物理寻址。

相关图片

相关文章