[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 ...
随机推荐
- 聊聊我在这家公司设计的SSO
最近小明遇到一个需求:需要将几个独立的系统(子系统)汇总到一个集中的系统(父系统)当中,当用户在父系统登录过后,再点击这几个子系统,就可以免登录跳转到任意一个系统.当时一听,duang~duang~就 ...
- idea快速生成实体类
1.打开idea的视图,选择Database 2.选择对应的数据库[这里是mysql为例] 3.输入自己对应的内容,输入完成可点击Test Connection进行测试,成功SUCCESS 4.点击确 ...
- 史上最全面的SignalR系列教程-6、SignalR 实现聊天室
1.概述 通过前面几篇文章对SignalR的详细介绍.我们知道Asp.net SignalR是微软为实现实时通信的一个类库.一般情况下,SignalR会使用JavaScript的长轮询(long po ...
- 在linux系统中配置NVMe over TCP
1. 准备环境 1.1 准备linux系统 要求的linux系统可以是运行在物理机上,也可以是虚拟机上: 建议有个linux系统,一个做host,一个做target,如果资源紧张也可以把host和ta ...
- 如何使用人工智能保护API的安全
数字转型是基于一种可驱动新的操作模型的API,提供对业务逻辑.应用程序和数据的直接访问.虽然这种访问对于员工,合作伙伴和客户来说非常方便,但它也使API成为黑客和恶意网络的攻击目标.随着越来越多的攻击 ...
- 外观/门面模式(Facade)
2015/4/28 外观/门面模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. #include <vector> ...
- Java描述表达式求值的两种解法:双栈结构和二叉树
Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保 ...
- 二分查找法---scala方式
二分查找法---scala方式 ,b) } }
- Java并发编程知识点总结Volatile、Synchronized、Lock实现原理
Volatile关键字及其实现原理 在多线程并发编程中,Volatile可以理解为轻量级的Synchronized,用volatile关键字声明的变量,叫做共享变量,其保证了变量的“可见性”以及“有序 ...
- 转载-Spring Boot应用监控实战
概述 之前讲过Docker容器的可视化监控,即监控容器的运行情况,包括 CPU使用率.内存占用.网络状况以及磁盘空间等等一系列信息.同样利用SpringBoot作为微服务单元的实例化技术选型时,我们不 ...