移动中间件的动态内存管理 | |
作者: 时间:2009-03-09 来源:52RD手机研发 | |
内存管理对于每个程序员来说都是至关重要的,这点勿庸置疑。程序员不应当是限于使用内存管理,而应当理解内存管理的原理和方法。 计算机硬件和操作系统发展到现在,对于一般的应用编程来说,内存似乎是不太重要的因素了,每个线程似乎都享有独立的4GB空间(当然,这是虚拟空间,是计算机硬件和操作系统联合作用的结果)。但是对于手机这种嵌入式开发来说,由于应用处于内存受限的环境中,所以内存管理,这个曾经的话题又被提到重要的位置,并且非常重要。 对于移动中间件来说,因为要提供平台和系统无关性,并且在程序用到的存储空间中,只有动态内存和操作系统关系紧密(其他的自动变量存储在栈中,由编译器负责,而全局变量存储在文件的数据段),所以对于动态内存的管理来说,中间件更要亲力为之,简而言之,就是利用中间件自己的内存分配和释放函数来替换标准的函数如malloc()和free()。 首先,我们看一下一个应用程序存储的简单示意图: 通常,动态内存的分配器维护着图中堆区域(heap),堆是一个二进制零的区域,并且向上增长。在unix系统中,由内核维护着一个变量brk,这个变量指向堆的顶部。 动态内存的分配器将堆视为一组不同大小的块的集合,每个块都是一个连续的存储器块,要么是已分配的,要么是空闲的。已分配块供应用程序使用。 分配器通常由两种方式工作,两种方式都要求应用显式地分配内存块,不同在于由哪个实体负责释放已分配的内存块。 § 显式分配器(explicit allocator)要求程序显式地释放任何已分配的内存块。例如C语言中的malloc和free,C++中的new和delete也属于这种形式。 § 隐式分配器(implicit allocator)要求分配器检测合适一个已分配块不再被应用程序使用,然后就释放这个块。这种方法也叫作垃圾收集技术,如java就是使用这种技术来释放已分配的块。 接下来,结合中间件的特点来说明动态内存管理的方法(大部分的原理相同)。 二、 概述 中间件内存管理方式是:首先从底层申请一块足够大的静态内存空间,把这块空间当作系统动态内存的heap,在这个基础上进行内存的动态分配和释放。这样做的好处是动态的管理都是由中间件完成,和下层的操作系统无关。使得中间件移植更加方便,并且使得上层的编程变得更加方便和快捷统一。 1. 初始化和静态空间的取得 在中间件初始化的时候,要申请一个静态的数组。具体动态空间的取得如下所示: HEAP_MAX_SIZE =0x00380000(3.5M) static unsigned HeapMemory[HEAP_MAX_SIZE/4]; |
标签: |
文章评论(0条评论)
登录后参与讨论