前言首先,我们需要了解为什么需要动态内存分配。熟悉C语言的读者应该对此不陌生。当需要一块内存时,会使用malloc函数申请所需大小的内存,函数返回一块内存。初始地址。简单的说,动态内存分配的好处就是在需要的时候可以按需分配内存,不需要的时候可以释放,这样就可以高效的使用内存。下面这篇文章从零开始实现一个完整的动态内存分配。简单的动态内存分配实现内存分配就是将未使用的内存块用于需要的变量(普通变量、指针变量、结构体变量等),因为使用后需要释放,会造成空闲内存分散。在内存池中。因此,需要对内存进行管理,即标记内存的使用情况。上图是某个内存池被使用后的某个时刻。可以看出,已用块和未用块是不连续的,所以需要用表格来标记,这就是BitMap。假设现在内存是按照每个Byte来划分的,然后用一个bit来标记block,1表示使用,0表示不使用,这样的block需要一个bit。让我们用C语言来实现这个简单的动态内存分配。#include#defineMEM_POOL_SIZE64unsignedcharMemPool[MEM_POOL_SIZE];unsignedcharBitMap[MEM_POOL_SIZE/8]={0};//BitMap[0]MSB->LSBMemPool[0~8]//BitMap[1]MSB->LSBMemPool[9~15]//BitMap[2]MSB->LSBMemPool[16~23]//...voidInitMemAlloc(void){inti=MEM_POOL_SIZE;while(i--){MemPool[i]=0;}i=MEM_POOL_SIZE/8;while(i--){BitMap[i]=0;}}void*MemAlloc(unsignedintm_size){unsignedinti=0,j=0,k=0,index=0,count=0,mapv=0,cache;if(m_size>MEM_POOL_SIZE){returnNULL;}else{for(;i