[C++] 空间配置器——allocator类
#ifndef _ALLOCATOR_H_
#define _ALLOCATOR_H_ #include<memory>
#include<string>
#include<iostream>
#include<vector>
using namespace std;
class Allocator { //这个是自己命名的类
public:
/**
* 内存分配练习
* allocate(n),分配大小为n未初始化空间;
* construct(q),对q指向的空间进行默认初始化;construct(q,"j"),对q指向的空间初始化为"j",只要是合法的初始化器就可以;
* destroy(q),对q指向的对象进行析构
* deallocate(p,n),释放原始分配的空间,必须先把内存中的对象全部析构,然后全部释放,不能只释放一部分
*/
void allocator_test(const int &n) {
allocator<string>alloc;
auto p = alloc.allocate(n);//分配保存n个string的原始内存
auto q = p;
while (q != p + n) {
alloc.construct(q++, "zhizhiyu");//构造n个string
}
cout << "构造的第一个string是:"<<*(p) << endl;
while (q != p) {
alloc.destroy(--q);//对分配的对象进行析构
}
alloc.deallocate(p, n);//释放内存
}
/**
* 拷贝和填充原始内存,allocate,deallocate,
* uninitialized_copy(b,e,b2),向原始空间b2中拷贝由b和e指定范围的元素,返回递增之后的目的位置寄存器,指向下一个未构造的位置
* uninitialized_copy_n(b,n,b2),向原始空间b2中拷贝由b开始的n个元素,返回递增之后的目的位置寄存器,指向下一个未构造的位置
* uninitialized_fill(b,e,t),b和e范围指定的原始内存用元素t填充,无返回值
* uninitialize_fill_n(b,n,t),b开始的n个原始内存空间用元素t填充,无返回值
*/
void alloc_copy_and_fill(const vector<int>&v) {
int n = v.size();
allocator<int> alloc;
auto p = alloc.allocate(n * );
auto q = uninitialized_copy(v.begin(), v.end(), p);//拷贝v到未初始化空间中
q = uninitialized_copy_n(v.begin(), n, q);//再把v拷贝一遍
uninitialized_fill(q, q + n, );//用22填上接下来n个空间
uninitialized_fill_n(q+n, n, );//剩余n个空间变为44
auto pq = q + *n;
while (pq != p) {
cout << *(--pq) << " ";
alloc.destroy(pq);
}
alloc.deallocate(p, n * );
}
}; #endif
[C++] 空间配置器——allocator类的更多相关文章
- C++ 空间配置器(allocator)
C++ 空间配置器(allocator) 在STL中,Memory Allocator 处于最底层的位置,为一切的 Container 提供存储服务,是一切其他组件的基石.对于一般使用 STL 的用户 ...
- 《STL源码剖析》chapter2空间配置器allocator
为什么不说allocator是内存配置器而说是空间配置器,因为空间不一定是内存,也可以是磁盘或其他辅助介质.是的,你可以写一个allocator,直接向硬盘取空间.sgi stl提供的配置器,配置的对 ...
- STL源码剖析 — 空间配置器(allocator)
前言 以STL的实现角度而言,第一个需要介绍的就是空间配置器,因为整个STL的操作对象都存放在容器之中. 你完全可以实现一个直接向硬件存取空间的allocator. 下面介绍的是SGI STL提供的配 ...
- C++ STL学习之 空间配置器(allocator)
众所周知,一般情况下,一个程序包括数据结构和相应的算法,而数据结构作为存储数据的组织形式,与内存空间有着密切的联系. 在C++ STL中,空间配置器便是用来实现内存空间(一般是内存,也可以是硬盘等空间 ...
- STL学习笔记:空间配置器allocator
allocator必要接口: allocator::value_type allocator::pointer allocator::const_pointer allocator::referenc ...
- STL源码剖析——空间配置器Allocator#1 构造与析构
以STL的运用角度而言,空间配置器是最不需要介绍的东西,因为它扮演的是幕后的角色,隐藏在一切容器的背后默默工作.但以STL的实现角度而言,最应该首先介绍的就是空间配置器,因为这是这是容器展开一切运作的 ...
- STL源码剖析——空间配置器Allocator#2 一/二级空间配置器
上节学习了内存配置后的对象构造行为和内存释放前的对象析构行为,在这一节来学习内存的配置与释放. C++的内存配置基本操作是::operator new(),而释放基本操作是::operator del ...
- STL之空间配置器allocator
摘要 C++STL的空间配置器将内存的分配.释放,对象的构造.析构都分开执行,内存分配由alloc::allocate()负责,内存的释放由alloc::deallocate()负责:对象的构造由:: ...
- STL源码剖析——空间配置器Allocator#3 自由链表与内存池
上节在学习第二级配置器时了解了第二级配置器通过内存池与自由链表来处理小区块内存的申请.但只是对其概念进行点到为止的认识,并未深入探究.这节就来学习一下自由链表的填充和内存池的内存分配机制. refil ...
随机推荐
- 持续集成高级篇之Jekins参数化构建(二)
系列目录 上一节我们讲解了如何使用bat脚本或者powershell脚本自身的机制来达到参数化构建的目的,这在一定程序上增加了灵活性,然而缺点也相当明显:它只能适应一些相对比较固定的参数传入(比如像上 ...
- 深入浅出TypeScript(2)- 用TypeScript创建web项目
前言 在第一篇中,我们简单介绍了TypeScript的一些简单语法,那么如果我们只是简单使用TypeScript开发一个web项目,应该做哪些准备?接下来我们就结合TypeScript和Webpack ...
- 以太坊智能合约[ERC20]发币记录
以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行.本文就智能合约发代币流程作一完整介绍( ...
- vux-scroller实现移动端上拉加载功能
本文将讲述vue-cli+vux-scroller实现移动端的上拉加载功能: 纠错声明:网上查阅资料看到很多人都将vux和vuex弄混,在这里我们先解释一下,vuex是vue框架自带的组件,是数据状态 ...
- Unity之SDK接入(Unity与Android通信)
首先介绍一点关于Android与unity通信的知识: 完成通信主要靠unity中的class.jar包(在unity的安装目录下). 在unity中调用android的方法: jo.call(&qu ...
- [Python] socket实现TFTP上传和下载
一.说明 本文主要基于socket实现TFTP文件上传与下载. 测试环境:Win10/Python3.5/tftpd64. tftpd下载:根据自己的环境选择下载,地址 :http://tftpd32 ...
- 前端H5与安卓和ios之间通信
在一些app场景中,经常看到app里面嵌套H5页面, 安卓和ios提供一个空壳子,方法两者互相调用.上一周就是写H5页面让安卓和ios调用使用,中间传参,接受参数.通过 window.wx 对象调用一 ...
- String类的intern()方法,随常量池发生的变化
JVM的知识这里总结的很详细:https://github.com/doocs/jvm/blob/master/README.md,因此在本博客也不会再对其中的东西重复总结了. intern的作用 简 ...
- 微擎 人人商城 对接京东vop 对接京东商品,同步商品 地址,库存,价格,上下架等。(二) 设置后台管理界面
昨天提到了,由于vop商品池未开通,故对接工作只能暂缓,现在要做一个专门针对vop商品的后台管理, 老规矩,先上设计链路图 因为后台本来就是有比较完善的商品管理系统, 所以我们只是针对vop 进行简单 ...
- Redis数据类型的基本操作
Redis数据类型的基本操作 一.string类型 1.设置value