iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >简单说说STL的内存管理
  • 211
分享到

简单说说STL的内存管理

STL内存管理 2022-11-15 22:11:46 211人浏览 薄情痞子
摘要

1. 概述STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物。 STL标准如下介绍Allocatorthe STL inc

1. 概述
STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物。

STL标准如下介绍Allocator
the STL includes some low-level mechanisms for allocating and deallocating memory. Allocators are very specialized, and you can safely ignore them for almost all purposes. Allocators encapsulate allocation and deallocation of memory. They provide a low-level interface that permits efficient allocation of many small objects; different allocator types represent different schemes for memory management.
<STL 源码剖析>将其描述为空间配置器,理由是allocator可以将其它存储介质(例如硬盘)做为stl 容器的存储空间。由于内存是allocator管理的主要部分,因此,本文以STL内存管理为出发点介绍allocator。

Allocator就在我们身边,通常使用STL的方式:
#include <vector>
std::vector<int> Array(100);

本质上,调用的是:

#include <vector>
std::vector<int, std::allocator> Array(100);
std::allocator就是一个简单的Allocator

2. 使用
针对不同的应用场合,STL中实现了不同的Allocator,如下(GCc-3.4:Http://www.cs.huji.ac.il/~etsman/Docs/gcc-3.4-base/libstdc++/html/20_util/allocator.html):

__gnu_cxx::new_allocator<T> Simply wraps ::operator new and ::operator delete.
__gnu_cxx::malloc_allocator<T> Simply wraps malloc and free. There is also a hook for an out-of-memory handler
__gnu_cxx::debug_allocator<T> A wrapper around an arbitrary allocator A. It passes on slightly increased size requests to A, and uses the extra memory to store size infORMation.
__gnu_cxx::__pool_alloc<bool, int> A high-performance, single pool allocator. The reusable memory is shared among identical instantiations of this type.
__gnu_cxx::__mt_alloc<T> A high-performance fixed-size allocatorthat was initially developed specifically to suit the needs of multi threaded applications
__gnu_cxx::bitmap_allocato A high-performance allocator that uses a bit-map to keep track of the used and unused memory locations

例如,在多线程环境下,可以使用:


#include <vector> 
#include <mt_allocator.h> 
std::vector<int, __gnu_cxx::__mt_alloc<int>> Array(100); 

3.一个简单的Allocator实现
我们可以实现自己的allocator

#include <memory> 

template<class T> 
class my_allocator : public std::allocator<T> 

public: 
typedef std::allocator<T> base_type; 

// 必须要重新定义 
template<class Other> 
struct rebind 

typedef my_allocator<Other> other; 
}; 
// 内存的分配与释放可以实现为自定义的算法 
pointer allocate(size_type count) 
{  
return (base_type::allocate(count)); 


void deallocate(pointer ptr, size_type count) 
{  
base_type::deallocate(ptr, count); 


 
// 构造函数 
my_allocator() 
{} 

my_allocator(my_allocator<T> const&) 
{} 

my_allocator<T>& operator=(my_allocator<T> const&) 
{  
return (*this); 
 } 

template<class Other> 
my_allocator(my_allocator<Other> const&) 
{} 

template<class Other> 
my_allocator<T>& operator=(my_allocator<Other> const&) 
{  
return (*this); } 
};  

--结束END--

本文标题: 简单说说STL的内存管理

本文链接: https://www.lsjlt.com/news/172535.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 简单说说STL的内存管理
    1. 概述STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物。 STL标准如下介绍Allocatorthe STL inc...
    99+
    2022-11-15
    STL 内存管理
  • 简单说说Python与Go的区别
    背景 工作中的主力语言是Python,今年要搞性能测试的工具,由于GIL锁的原因,Python的性能实在是惨淡,需要学一门性能高的语言来生成性能测试的压力端。因此我把目光放在了现在的新秀Go。经过一段时间的学习,也写了一个小工具,...
    99+
    2023-01-31
    区别 简单 Python
  • C++动态内存管理详情解说
    目录写在前面C/C++ 内存分布C语言内存管理方式C++内存管理方式C++为何增加了new 和 deletenew 一个对象new 一个数组deletemalloc &am...
    99+
    2024-04-02
  • 简单说说JVM堆区的相关知识
    一、堆概述 一个jvm实例(进程)只存在一个堆内存,堆也是java内存管理的核心区域。 java 堆区在jvm启动时即被创建,其空间大小也就被确定了 《ja...
    99+
    2024-04-02
  • Golang内存管理简单技巧详解
    目录引言预先分配切片结构中的顺序字段使用 map[string]struct{} 而不是 map[string]bool引言 除非您正在对服务进行原型设计,否则您可能会关心应用程序的...
    99+
    2024-04-02
  • python 整除(/)操作符的简单说明
    当我们在用python来处理两个整数(无小数)相除的时候,计算结构的小数部分被截取掉了,只留下整数的部分。有些时候这个功能很有用,但是当我们仅仅需要普通的除法的时候,结果就与我们期望的不符。 [root@rhel6164 ~]# pyt...
    99+
    2023-01-31
    操作 简单 python
  • Qt Creator使用教程的简单说明
    目录Qt Creator 欢迎界面Qt Creator 新建项目1)左边栏2) 代码编辑器Qt Creator 编辑 UIQt Creator 生成和运行程序Qt 在很长的一段时间内...
    99+
    2024-04-02
  • JVM的内存溢出异常说明
    本篇内容介绍了“JVM的内存溢出异常说明”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!举例说明含义:-Xss128k每个线程的java栈大小...
    99+
    2023-06-17
  • vuex在vite&vue3中的简单使用说明
    目录vuex在vite&vue3的使用一、说明二、使用vue3.x之vite初体验一、项目搭建二、附项目结构三、附项目启动成功图vuex在vite&vue3的使用 注...
    99+
    2024-04-02
  • C++内存管理之简易内存池的实现
    目录什么是内存池?它的实现过程为:初步实现使用嵌入指针改进更简化:static allocatormacor for static allocator什么是内存池? 频繁的调用 ma...
    99+
    2024-04-02
  • jvm的内存参数说明和配置
    这篇文章主要介绍“jvm的内存参数说明和配置”,在日常操作中,相信很多人在jvm的内存参数说明和配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jvm的内存参数说明和配置”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-02
  • 【JavaEE】简单了解操作系统、进程&内存管理
    目录 前言:  一、操作系统: 操作系统的定位: 应用程序: 系统调用: 操作系统内核: 驱动程序: 硬件设备:  二、进程:  什么是进程?  进程的描述与组织:  描述: 组织: PCB中的 特征(属性) CPU分配——进程调度:  进...
    99+
    2023-09-02
    运维 服务器 java linux java-ee
  • go web 处理表单的输入的说明
    一 目录结构 二 前端页面 文件名:login.html <!DOCTYPE html> <html> <head> &l...
    99+
    2024-04-02
  • C++内存管理中简易内存池怎么实现
    这篇文章主要介绍“C++内存管理中简易内存池怎么实现”,在日常操作中,相信很多人在C++内存管理中简易内存池怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++内存管理中简易内存池怎么实现”的疑惑有所...
    99+
    2023-06-22
  • js设计模式中单例模式的简要说明
    目录一. 认识单例模式二. 单例模式的分类  三. 具体实现和思想学习 1. 简单实现单例模式2. 透明单例模式3. 代理实现单例模式4. js的单例模...
    99+
    2024-04-02
  • Aerospike的bin内存管理--即列内存管理
    1、内存申请函数调用 write_master->write_master_dim->write_master_bin_ops ->write_master_bin_ops_l...
    99+
    2024-04-02
  • Linux系统管理命令的使用说明
    本篇内容主要讲解“Linux系统管理命令的使用说明”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统管理命令的使用说明”吧!shutdown命令 shutdown命令可以安全地关闭或重...
    99+
    2023-06-13
  • C++使用动态内存分配的原因解说
    上节我们讲了C++程序的内存分布。C++程序的内存分布 本节来介绍为什么要进行内存分配。 按需分配,根据需要分配内存,不浪费。 内存拷贝函数void* memcpy(void* de...
    99+
    2024-04-02
  • C++内存池的简单实现
    目录一、内存池基础知识1、什么是内存池1.1 池化技术1.2 内存池2、内存池的作用2.1 效率问题2.2 内存碎片3、内存池技术的演进二、简易内存池原理1、整体设计1.1 内存池结...
    99+
    2024-04-02
  • C++ 内存管理中的内存池
    内存池是一种 c++++ 技术,用于管理频繁分配和释放的特定大小对象。它使用预分配的内存块,提供比标准内存分配器更高的性能,特别是针对高度并发的应用程序。 C++ 内存管理中的内存池 ...
    99+
    2024-05-01
    内存池 c++ 内存管理 c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作