首页 > 代码库 > SGI空间分配器之第一级配置器剖析
SGI空间分配器之第一级配置器剖析
/*用途:用于分配内存空间的模板,作为第一级分配;模板形参:无意义,模板内没有使用接口函数:allocate函数用于分配空间 reallocate函数用于指定地址重新分配空间 deallocate函数用于释放空间 set_malloc_hander函数用于获取“内存不足处理例程”的函数时间:2014-12-4*/template <int inst>class __malloc_alloc_template{private: typedef void (*Func)();//定义一个函数指针类型为Func表示void (*)()public: static void* allocate(size_t n) { void *result=malloc(n); if(0==result) {//stl_alloc.h中的oom_malloc(n);处理过程 Func my_malloc_handler;//定义一个临时的函数指针变量。 for(;;) {//此处若是给了处理内存函数,那么总是会循环的,知道处理好了(实例内在应该会过多久时间而让程序退出)。 my_malloc_handler=__malloc_alloc_oom_handler; if(0==my_malloc_handler){__THROW_BAD_ALLOC;}//表示没有内存不够处理历程则丢错,结束。 (*my_malloc_handler)();//解引用后调用该函数指针所指函数;即运行历程处理。 result=malloc(n);//再次调用分配内存函数 if(result) return(result);//如果成功分配,则结束;否则就继续历程处理,继续内存分配 } } return result; } static void deallocate(void *p,size_t n)//实质上只是用了P { free(p); } static void* reallocate(void *p,size_t oldSZ,size_t newSZ)//老的内存大小无用了 { void *result=remalloc(p,newSZ);//本身功能就是将旧的内容拷贝到新的内容中,且自己寻找内存块 //类似处理 /*异常处理块 */ return result; } //static void (* set_malloc_hander(void (*f)))() static Func set_malloc_hander(Func f)//用于获取历程处理的函数;且返回之前的历程处理函数 { Func old=__malloc_alloc_oom_handler; __malloc_alloc_oom_handler=f; return old; }private: //定义一个函数指针变量,用于指定处理内存不足处理历程,也可以为static Func __malloc_alloc_oom_handler; static void (* __malloc_alloc_oom_handler)();};
SGI空间分配器之第一级配置器剖析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。