首页 » 业界动态 » 移动中间件的动态内存管理

移动中间件的动态内存管理

作者:  时间:2009-03-09 21:08  来源: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];
 

相关推荐

u-blox为专业IoT平台提供蜂巢式通讯连接技术

u-blox  iot  无线通信  2018-01-26

u-blox发表具备四频2G向后兼容的全球最小 LTE Cat M1和 NB-IoT多模模块

u-blox  iot  lte  2018-01-23

通用测试仪器大全之电子负载仪

2017-11-16

u-blox推动全球第一款NB-IOT智能路灯系统的实现

2017-09-01

ercogener采用u-blox LTE Cat M1蜂巢式技术 开发EMEA地区的首款工业4.0调制解调器

2017-11-03

u-blox与Atoll Solutions携手为印度的智慧城市提供易于使用的LPWA技术

u-blox  IoT  LTE  智慧城市  2017-08-12
在线研讨会
焦点