4 内存丢失问题的解决
由于系统的内存管理默认采用“2的幂”的分配方法,这就造成了内存空间的巨大浪费,当某些应用程序要申请较大的连续空间时,却不能满足。为了解决这个问题,专门为uClinux内核设计了可选的内存分配器。不同的内核版本,这个可选的内存分配器不同,一般是page_alloc2和kmalloc2。
page_alloc2能解决缺省的分配方法造成的浪费问题。虽然它也是使用“2的幂”的分配方法,但它是按页(每页4 096B,即4 KB)分配的,分配的内存大小如果已经满足了要求,则只是将当前的一页分配出去,其他的就不再分配。还是一个65 KB的应用程序,如果使用这种方法,就只是分配68 KB(≥65 KB,且为整页)即可,这样就能节省60 KB的空间。
page_alloc2还采取了一些避免内存碎片的方法。它将所有的两页(8 KB)或更少的内存需求从空闲内存开始部分向上分配,所有大的内存需求从剩余内存的末尾部分开始向下分配。这样防止了网络缓存等的临时分配,避免了内存碎片的出现。同时,它支持一次申请超过1 MB的内存空间,这对一些大的应用程序是很好的支持。采用此方法后,在系统运行过程中,并未出现过页面访问出错问题。通过free命令查看内存分配如表2所列。

结 语
在嵌入式系统应用日益广泛的情况下,本文结合嵌入式Web在多支点触发系统中的应用,介绍了Web访问出现的问题以及它的解决方法。在实际应用中,新的内存分配方法能让系统稳定地工作,但是从表2可以发现:采用“page_alloc2'’的内存分配方法时,系统的Cache较小,这就造成了页面访问有一定的延时。而“2的幂”的分配方法,系统的Cache较大,访问速度较快。从这个对比得知,在反应时间要求不是很高的情况下,“page_alloc2”的内存分配方法更适合小内存的嵌入式系统;而“2的幂”的分配方法更合适那些内存足够大的嵌入式系统。系统开发者可以根据实际情况采用不同的方案。