多维数组 (Multi-array) 是向量的扩充,向量的向量就组成了多维数组。 能够表示为ELEM A[c1..d1][c2..d2]...[cn..dn]程序员
内存是一维的,因此数组的存储也只能是一维的数组
使用者老是从freelist中分配内存,若是存在没有使用的内存块就直接摘出来使用,若是没有的话再从系统中分配。 使用完毕后并不去直接delete该内存块,而是把他插入到可用内存块的头部,同时让他指向以前可用内存块的头部。bash
变长可利用块网络
常见的顺序适配方法:函数
把待回收块释放回可利用空间表ui
若是遇到因内存不足而没法知足一个存储请求,存储管理器能够有两种行为:this
无用单元收集:最完全的失败处理策略spa
经常会有频繁申请、释放内存的需求,好比在发送网络报文时,每次都要分配内存以存储报文,等报文发送完成后又须要删除报文。 为了不频繁的new/delete对系统带来的开销,须要实现一个通用的FreeList机制。使用者老是从free list中分配内存,若是存在没有使用的内存块就直接摘出来使用,若是没有的话再从系统中分配。使用完毕后并不去直接delete该内存块,而是交给FreeList保管。3d
template <typename Elem>
class FreeList
{
private:
static FreeList<Elem> *freelist;
public:
Elem element;
FreeList *next;
FreeList(const Elem& elem, FreeList* next=NULL);
FreeList(FreeList* next=NULL);
void* operator new(size_t); // 重载new
void operator delete(void*); // 重载delete
};
template <typename Elem>
FreeList<Elem>* FreeList<Elem>::freelist = NULL;
template <typename Elem>
FreeList<Elem>::FreeList(const Elem& elem, FreeList* next)
{
this->element = elem;
this->next = next;
}
template <typename Elem>
FreeList<Elem>::FreeList(FreeList* next)
{
this->next = next;
}
template <typename Elem>
void* FreeList<Elem>::operator new(size_t)
{
/*freelist没有可用空间,就从系统分配*/
if(freelist == NULL)
return ::new FreeList;
/*不然,从freelist表头摘取结点*/
FreeList<Elem>* temp = freelist;
freelist = freelist->next;
return temp;
}
template <typename Elem>
void FreeList<Elem>::operator delete(void* ptr)
{
/*把要释放的结点空间加入到freelist中*/
((FreeList<Elem>*)ptr)->next = freelist;
freelist = (FreeList<Elem>*)ptr;
}
复制代码