allocator简单实现
来源:互联网 发布:云计算应用场景举例 编辑:程序博客网 时间:2024/06/08 15:59
allocator是c++标准库中用于管理内存的一个类。主要包括以下类方法:
代码如下(来源于《STL源码剖析》):
#ifndef _JJALLOC_#define _JJALLOC_#include <new> //for placement new#include <cstddef>#include <cstdlib>#include <climits>#include <iostream>namespace JJ{template <class T>inline T* _allocate(ptrdiff_t size, T*) //分配size * sizeof(T)的内存{set_new_handler(0);T* tmp = (T*)(::operator new((size_t)(size * sizeof(T)))); //申请内存if (tmp == 0){cerr << "out of memory" << endl;}return tmp;}template <class T>inline void _deallocate(T* buffer){::operator delete(buffer); //为什么不用 delete [] ? ,operator delete 区别于 delete //是一个操作符}template <class T1,class T2>inline void _construct(T1 *p, const T2 &value){new(p) T1(value); //用value 函数初始化 *p ? //placement new的用法,p内存地址已存在}template <class T>inline void _destory(T *ptr){ptr->~T();}template <class T>class allocator {public :typedef T value_type;typedef T* pointer;typedef const T* const_pointer;typedef T& reference;typedef const T& const_reference;typedef size_t size_type;typedef ptrdiff_t difference_type;template <class U>struct rebind {typedef allocator<U> other;};pointer allocate(size_type n,const void *hint=0){return_allocate((difference_type)n,(pointer)0)}void deallocate(pointer p, size_type n) { _deallocate(p); }void construct(pointer p, const T& value){_construct(p, value);}void destory(pointer p) { _destory(p); }pointer address(reference x) { return (pointer)&x; }const_pointer const_address(const_reference x) { return (const_pointer)&x; }size_type max_size() const{ return size_type(UINT_MAX / sizeof(T)); //最多分配T元素数}};}
参考:《STL源码剖析》P45-46
阅读全文
0 0
- allocator简单实现
- STL 简单 allocator 的实现
- [转载] STL allocator的介绍和一个基于malloc/free的allocator的简单实现
- c++实现一个简单的空间配置器allocator
- MemoryPool —— 简单高效的内存池 allocator 实现
- stl allocator实现代码
- allocator自定义实现
- c++ 一个简单的allocator
- std::allocator 的简单用法
- 【源码剖析】MemoryPool —— 简单高效的内存池 allocator 实现
- 【源码剖析】MemoryPool —— 简单高效的内存池 allocator 实现
- A Demo Allocator——实现一个简单的自定义显式分配器
- The GNU STL allocator 实现
- 实现自定义的 STL allocator
- allocator
- allocator
- allocator
- allocator
- Fragment和activity的startActivityForResult关系
- 机器学习
- Android 6.0+动态权限申请模板
- Android Framework-Clean Architecture
- Flutter实战一Flutter聊天应用(十五)
- allocator简单实现
- 邻接表的创建及其使用
- 盒子模型
- QT拦截关闭窗口事件
- Data analysis and Data mining
- iOS开发已已错已忘知识点总结,持续更新中,,,
- shiro的缓存到底开不开
- Android开发面试经——常见人事面试问题
- 2806 红与黑