这篇文章主要为大家展示了“编程语言中如何实现一个内存池管理的类方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“编程语言中如何实现一个内存池管理的类方法”这篇文章吧。
桃山ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
模拟STL中的freelist,有这个思想在内。
union obj { union obj* next; char p[1]; }; class MemoryPool { public: MemoryPool() { union obj* temp; m_memory.assign(5,(union obj*)NULL); for(int i=0;i<m_memory.size();i++) { for(int j=0;j<m_memory.size();j++) { temp = (obj*)malloc(sizeof(char)*(1<<(i+3))); temp->next = m_memory[i]; m_memory[i] = temp; } } } char* mem_get(int size) { int j; if( size > 128) { char* start = (char*)malloc(sizeof(char)*size); return start; } int index = freelist_index(size); obj* temp = m_memory[index]; if(temp == NULL) // { for(j = index+1;j<m_memory.size();j++) { temp = m_memory[j]; if(temp != NULL) { m_memory[j] = temp->next; break; } } if(j>= m_memory.size()) { for(int j=0;j<m_memory.size();j++) { temp = (obj*)malloc(sizeof(char)*(1<<(index+3))); temp->next = m_memory[index]; m_memory[index] = temp; } temp = m_memory[index]; m_memory[index] = temp->next; return (char*)temp; } else { obj* cur; int up_size = round_up(size); for(int i=0;i<(1<<(j-index));i++) { cur = temp; cur->next = m_memory[index]; m_memory[index] = cur; temp = cur+up_size; } temp = m_memory[index]; m_memory[index] = temp->next; return (char*)temp; } } else { m_memory[index] = temp->next; return (char*)temp; } } void mem_free(void* p,int size) { if(size > 128) { free(p); return ; } obj* temp = (obj*)p; int index = freelist_index(size); temp->next = m_memory[index]; m_memory[index] = temp; } private: enum {_ALIGN = 8};// int freelist_index(int __bytes) { return (((__bytes) + (int)_ALIGN-1)/(size_t)_ALIGN - 1); } int round_up(int __bytes) { return (((__bytes) + (int) _ALIGN-1) & ~((int) _ALIGN - 1)); } vector<union obj*> m_memory; };
以上是“编程语言中如何实现一个内存池管理的类方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
名称栏目:编程语言中如何实现一个内存池管理的类方法
分享URL:https://www.cdcxhl.com/article14/geehge.html
成都网站建设公司_创新互联,为您提供移动网站建设、营销型网站建设、App开发、响应式网站、手机网站建设、Google
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联