VxWorks系统支持静态分配和动态分配相合的内存分 配。 低端内存区和VxWorks区采用静态分配,而保证 VxWorks的实时性和稳定性。 VxWorks的内存操作都是基于内存分区的,而不是 段页分区。 动态分配VxWorks中主要涉及的内存单元的概念有 ? 内存分区 :包含分区自身的描述信息(一个结构体 malloc分配)和一个或多个内存池,描述信息保存在系 统的内存分区中,而内存池就是该分区实际拥有的内 存空间。 内存池:内存池是一块连续的内存区域,包含一个或 多个内存块,通过memPartAlloc、memPartFree来申 请和释放。 内存块:每个内存块都有一个内存块头来描述自己 动态分配 内存分区在刚创建完毕时,只有一个内存池,用户程 序可在稍后往该分区中添加别的内存池,在一个内存 分区中,内存池之间的地址不一定是连续的。 VxWorks在启动过程中会创建一个包含系统内存池的 系统分区。操作系统和通常的大部分用户应用程序对 内存的操作,都发生在系统内存池中。 内存管理方式 要对空闲内存块进行合适的管理---自由链 ? 自由链是利用每个空闲内存块的开始几个单元存放本 空闲块的大小及下个空闲块的开始地址。 可以通过链首指针可以检索到所有的空闲块。 自由链没有大小的限制,容易添加和删除节 内存分配算法 VxWorks采用最先适应法来动态分配内存? ? 最先适应法要求可用表或自由链按起始地址递增的次 序排列。该算法最大特点是一旦找到大于或等于所要 求内存长度的内存块,则结束搜寻。然后,该算法从 所找到的内存块中划分出所要求大小的内存空间分配 给用户,并把余下的部分进行合并(如果相邻两块是空 闲的),合并后的内存块留在可用表或自由链中,并修 改其相应的表现。