//#ifndef GRAVELALLOC_H_INCLUDED
//#define GRAVELALLOC_H_INCLUDED#ifndef _GravelALLOC_
#define _GravelALLOC_
#include <new>    // for placement new
#include <cstddef> // for ptrdiff_t, size_t   ???
#include <cstdlib> //for exit()
#include <climits>    //for UINT_MAX
#include <iostream> // for cerr
using namespace std;
namespace Gravel{template <class T>inline T* _allocate(ptrdiff_t size, T*){set_new_handler(0) ; // ?T* tmp = (T*) (::operator new((size_t) (size *sizeof(T)))); // :: operatorif(tmp == 0){cout << "out of memory" <<endl;exit(1);}return  tmp;}template <class T>
inline void _deallocate (T* buffer){::operator delete(buffer);
}template <class T1,class T2>
inline void _construct(T1* p,const T2& value){new(p) T1(value); //  存放 new 调用 构造函数 T1 .没理解 new(p)怎么玩的
}template <class T>
inline void _destory(T* ptr){ptr -> ~T();
}template <class T>
class alloctor{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;//  rebind allocator of type U//    allocator::rebind 是一个嵌套class template.class rebind<U>有唯一的一个成员other(是一个typedef,代表 allocate<U>)template <class U>struct rebind{typedef allocator<U> other;};//配置空间,可以满足n个T对象 ,第二个参数是 一个提示。可以用这个参数来增加区域性,或者可以完全忽略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);}//  等价于 new((void*) p) T(x) // ???没有会等价void construct(pointer p,const T& value){_construct(p,value);}// 调用析构函数void destory(pointer p){_destory(p);}//返回对象的地址pointer address(reference x){return (pointer)&x;}//返回一个const对象的地址const_pointer const_address(const_reference x){return (const_pointer)&x;}//返回最大可成功分配的空间size_type max_size() const{return size_type(UINT_MAX/sizeof(T));}};
}#endif // GRAVELALLOC_H_INCLUDED
#include "Gravelalloc.h"
#include <vector>
#include <iostream>
using namespace std;
int main(){int a[5]={0,1,2,3,4};vector<int,Gravel::alloctor<int> >v(a,a+5);for(int i=0;i<v.size();++i){cout<<v[i]<<' ';}cout<<endl;return 0;
}

设计一个简单的空间配置器相关推荐

  1. 2.1 空间配置器(allocator)

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

  2. STL_空间配置器allocator

    空间配置器 所有的STL的操作对象(所有的数值)都存放在容器内,而容器一定要配置空间才能存放资料 空间配置器的标准接口 typedef unsigned int size_t: allocator:: ...

  3. SGI STL 空间配置器

    文章目录 一.空间配置器 二.为什么使用空间配置器? 三.construct.h 四.std::alloc的实现 关于std::alloc stl_alloc.h 空间的配置与释放 一级配置器 二级配 ...

  4. STL源码剖析 空间配置器 查漏补缺

    ptrdiff_t含义 减去两个指针的结果的带符号整数类型 ptrdiff_t (Type support) - C 中文开发手册 - 开发者手册 - 云+社区 - 腾讯云 std::set_new_ ...

  5. 使用lua实现一个简单的事件派发器

    设计一个简单的事件派发器,个人觉得最重要的一点就是如何保证事件派发过程中,添加或删除同类事件,不影响事件迭代顺序和结果,只要解决这一点,其它都好办. 为了使用pairs遍历函数,重写了pairs(lu ...

  6. HTML:给自己设计一个简单的专属网页音乐播放器

    Hello,大家好,我是wangzirui32,今天我们来学习如何给自己设计一个简单的网页音乐播放器. 开始学习吧! 学习目录 1. 项目架构 2. player.html 编写 3. style.c ...

  7. malloc开辟的空间在哪一个区间_C++进阶系列之STL(2)SGI版本空间配置器

    1.STL中的空间配置器在STL中,空间配置器分了2组,分别为一级空间配置器和二级空间配置器,但是它们都有自己各自运用的场合:一般说来,一级空间配置器一般分配的空间大于128B,二级空间配置器的分配空 ...

  8. stl源码剖析_《STL源码剖析》学习笔记——空间配置器

    目录 1. 空间配置器概述 2. 构造和析构基本工具 3. 空间的配置与释放,std::alloc 4. 内存基本处理工具 1. 空间配置器概述 从STL的实现角度来看,空间配置器的位置尤为重要,整个 ...

  9. C++ STL : SGI-STL空间配置器源码剖析

    文章目录 空间配置器的概念 SGI-STL空间配置器 一级空间配置器 二级空间配置器 申请空间 补充内存块 从内存池中索要空间 空间回收 内存碎片 外碎片 内碎片 空间配置器的再次封装 空间配置器的概 ...

最新文章

  1. LVS集群---做前端调度器搭建使用
  2. 数据库---增删改查
  3. 开源个.NetCore写的 - 并发请求工具PressureTool
  4. HelloWorld.java –打印Hello World的Java程序
  5. python第2位的值_Python组通过匹配元组列表中的第二个元组值
  6. Redis解决秒杀中的超卖问题
  7. 【registry】registry An exception was thrown while processing request with message
  8. 重新认识Java包的命名规则
  9. Gym 100633G Nano alarm-clocks
  10. EOS合约开发 - 钱包篇
  11. 学校后勤物资管理系统(数据库课程设计)
  12. HEVC—SAO技术
  13. 计算机电源改造加大功率,最标准的电脑电源功率计算公式 十代酷睿电源搭配建议...
  14. 抖音收购musical.ly后,最难过的为什么是快手?
  15. 电脑预装linux系统,电脑预装Linux第三方系统怎么破?看外行人重装Win10系统的精准攻略...
  16. Linux下CPU使用率过高的排查方法
  17. 实现球体碰撞,使用这个库就够了
  18. IOS 屏幕适配理论篇
  19. 人工智能+医疗 驶入快车道
  20. python风险评分卡系统_智能风控:Python金融风险管理与评分卡建模(梅子行毛鑫宇著)...

热门文章

  1. JS技巧:兼容性导出表格为Excel文件
  2. 微软系统工具套件SysinternalsSuite各个工具功能说明
  3. 大型ERP等数据库系统常见几种设计
  4. 设计模式1实践-开篇
  5. 射频全网通笔记(附全球频段划分及主要运营商对应表)
  6. python自动化是什么-自动化专业学习python需要到什么程度?
  7. python的闭包及装饰器
  8. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)
  9. 我阅读科研文献的一些做法[转]
  10. 二叉树查找结点c语言_二叉树操作详解