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简单实现相关推荐

  1. kernel 选项详解(stlinux2.3)

     General setup(基本属性设置)  ->[]prompt for development and/or incomplete code/drivers //显示尚在开发的代码和驱 ...

  2. allocator类初学的简单例子

    在C++中,我们基本用new(delete)操作符分配(释放)内存.new操作符为特定类型分配内存,并在新分配的内存中构造该类型的一个对象.new表达式自动运行合适的构造函数来初始化每个动态分配的类类 ...

  3. [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)...

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code  1 2   template <  class _Ty,  c ...

  4. C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍

    继续学习侯捷老师的课程! 在前面的博客<C++ STL学习笔记(2) 容器结构与分类>中介绍了STL中常用到的容器以及他们的使用方法,在我们使用容器的时候,背后需要一个东西支持对内存的使用 ...

  5. 2.1 空间配置器(allocator)

    空间配置器隐藏在一切组件之后. 1.1 设计一个简单的空间配置器 根据STL的规范,以下是allocator的必要接口: allocator::value_type allocator::pointe ...

  6. C++线性序列容器vector简单总结

    C++线性序列容器<vector>简单总结 vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加:Vector类提供额外的方法来增加.删除 ...

  7. hash_map allocator

    1 hash_map定义在__gnu_cxx下 template<class _Key, class _Tp, class _HashFcn = hash<_Key>,        ...

  8. 一个return引发的血案 - 自己动手实现allocator

    最近在追旧番<STL代码剖析>.真的是很旧很旧的番了,STL在94年开始走入STL,这本书则是2002年出版的,C++03和C++11还不知何在的年代.看完第二章之后合上书,想自己写一个a ...

  9. 利用std::allocator实现自定义的vector类

    std::allocator即空间配置器,用于内存分配.更多的细节建议大家研究相关源码. 这里仅是利用std::allocator来实现简单的自定义vector类,如有问题欢迎指正. 1 #inclu ...

最新文章

  1. git(码云):如何把本地代码提交到码云代码管理项目上
  2. Java实用教程笔记 接口与实现
  3. hdu1716 排列2(排列生成算法)
  4. 微软的最高市值是多少?
  5. 动态修改属性设置 easyUI
  6. 5 怎么上下分屏_oppo的最新手机reno5系列怎么样
  7. SGU traffic light
  8. H3C交换机配置学习随笔
  9. 【编辑器】Vim学习笔记
  10. Android BlueDroid(一):BlueDroid概述
  11. Halcon深度学习自定义网络模型-VGG16
  12. 慕课软件质量保证与测试(第十章.课后作业)
  13. 红米k30 允许调用gpu调试层_高效渲染!RTX 3090卡皇打造NVIDIA STUDIO强力主机实战体验|nvidia|显卡|gpu|cpu|内存...
  14. Excel合并两列中的文本内容
  15. linux通过无线网卡上网,Linux使用4G/5G无线网卡模块上网
  16. 笔记本无线自动配置服务器,笔记本无线网卡充当路由器组建局域网
  17. Facebook的新算法可以预测出你的贫富阶级
  18. 计算机英语中文参考书,推荐几本计算机英语书?
  19. Android 打电话实现两种方法
  20. 应用于流形的卷积网络

热门文章

  1. unity3d 导入物体无法移动的情况
  2. OUTLOOK的通讯录导入问题
  3. 刀剑情缘服务器维护,刀剑情缘出现第三方登陆失败怎么办 解决方案一览
  4. 软件随想录(local.joelonsoftware.com/wiki)-2005年06月20日 最佳软件文选I - 介绍 - Introduction to Best Software Writin
  5. Linux时间戳和UTC时间
  6. python实现PCA降维
  7. 小程序实现授权完整流程
  8. Unity3d Terrain splat 9 is null 解决方法
  9. dubble配置文件各配置项
  10. js设置背景视频全屏显示