allocator简单实现
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
allocator简单实现相关推荐
- kernel 选项详解(stlinux2.3)
General setup(基本属性设置) ->[]prompt for development and/or incomplete code/drivers //显示尚在开发的代码和驱 ...
- allocator类初学的简单例子
在C++中,我们基本用new(delete)操作符分配(释放)内存.new操作符为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类 ...
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)...
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, c ...
- C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍
继续学习侯捷老师的课程! 在前面的博客<C++ STL学习笔记(2) 容器结构与分类>中介绍了STL中常用到的容器以及他们的使用方法,在我们使用容器的时候,背后需要一个东西支持对内存的使用 ...
- 2.1 空间配置器(allocator)
空间配置器隐藏在一切组件之后. 1.1 设计一个简单的空间配置器 根据STL的规范,以下是allocator的必要接口: allocator::value_type allocator::pointe ...
- C++线性序列容器vector简单总结
C++线性序列容器<vector>简单总结 vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加:Vector类提供额外的方法来增加.删除 ...
- hash_map allocator
1 hash_map定义在__gnu_cxx下 template<class _Key, class _Tp, class _HashFcn = hash<_Key>, ...
- 一个return引发的血案 - 自己动手实现allocator
最近在追旧番<STL代码剖析>.真的是很旧很旧的番了,STL在94年开始走入STL,这本书则是2002年出版的,C++03和C++11还不知何在的年代.看完第二章之后合上书,想自己写一个a ...
- 利用std::allocator实现自定义的vector类
std::allocator即空间配置器,用于内存分配.更多的细节建议大家研究相关源码. 这里仅是利用std::allocator来实现简单的自定义vector类,如有问题欢迎指正. 1 #inclu ...
最新文章
- git(码云):如何把本地代码提交到码云代码管理项目上
- Java实用教程笔记 接口与实现
- hdu1716 排列2(排列生成算法)
- 微软的最高市值是多少?
- 动态修改属性设置 easyUI
- 5 怎么上下分屏_oppo的最新手机reno5系列怎么样
- SGU traffic light
- H3C交换机配置学习随笔
- 【编辑器】Vim学习笔记
- Android BlueDroid(一):BlueDroid概述
- Halcon深度学习自定义网络模型-VGG16
- 慕课软件质量保证与测试(第十章.课后作业)
- 红米k30 允许调用gpu调试层_高效渲染!RTX 3090卡皇打造NVIDIA STUDIO强力主机实战体验|nvidia|显卡|gpu|cpu|内存...
- Excel合并两列中的文本内容
- linux通过无线网卡上网,Linux使用4G/5G无线网卡模块上网
- 笔记本无线自动配置服务器,笔记本无线网卡充当路由器组建局域网
- Facebook的新算法可以预测出你的贫富阶级
- 计算机英语中文参考书,推荐几本计算机英语书?
- Android 打电话实现两种方法
- 应用于流形的卷积网络
热门文章
- unity3d 导入物体无法移动的情况
- OUTLOOK的通讯录导入问题
- 刀剑情缘服务器维护,刀剑情缘出现第三方登陆失败怎么办 解决方案一览
- 软件随想录(local.joelonsoftware.com/wiki)-2005年06月20日 最佳软件文选I - 介绍 - Introduction to Best Software Writin
- Linux时间戳和UTC时间
- python实现PCA降维
- 小程序实现授权完整流程
- Unity3d Terrain splat 9 is null 解决方法
- dubble配置文件各配置项
- js设置背景视频全屏显示