当前位置: 首页 > news >正文

STL 6分配器

1. 分配器

1.分配器的核心功能
1.内存分配:替代 operator new 和 operator delete,提供自定义内存管理。
2.对象构造 / 析构:分离内存分配与对象构造(通过 construct 和 destroy 方法)。
3.类型抽象:使容器与具体内存管理解耦,支持不同的内存策略。

1.标准库中的默认分配器

所有 STL 容器默认使用 std::allocator,它是一个简单的包装,直接调用 operator new 和 operator delete。

1. rebind

在 C++ STL 分配器中,rebind 是一个必须实现的嵌套模板结构体,其核心作用是允许分配器为不同类型的对象创建适配版本。这是分配器设计中的一个关键机制,用于处理容器内部可能需要的不同类型的内存分配。

STL 容器(如 vector, list, map 等)在实现时可能需要为不同类型的对象分配内存。例如:

vector 需要为 T 类型的元素分配内存。
list 需要为 list 内部的节点(通常包含 T 和指向前 / 后节点的指针)分配内存。
map<K, V> 需要为键值对 pair<const K, V> 分配内存。

2. 分配器包含多个元素类型

STL 设计遵循泛型编程原则,要求组件之间通过统一接口进行交互。分配器作为内存管理的核心组件,需要提供以下信息:

1.操作对象的类型:分配器操作的元素类型是什么?
2.指针和引用的类型:如何表示指向元素的指针和引用?
3.大小和距离的类型:如何表示内存块的大小和指针间的距离?

通过类型别名,分配器将这些信息暴露给容器和算法,使它们能够在不依赖具体实现的情况下正确操作内存。

代码展示

template<typename T>struct MyAllocator {using value_type      = T;using pointer         = T*;using const_pointer   = const T*;using reference       = T&;using const_reference = const T&;using size_type       = std::size_t;using difference_type = std::ptrdiff_t;// 必须提供 rebind 模板template<typename U>struct rebind { using other = MyAllocator<U>; };};

需实现函数

pointer allocate(size_type n); // 分配 n 个 T 对象的内存
void deallocate(pointer p, size_type n);  // 释放内存
template<typename... Args>void construct(pointer p, Args&&... args);      // 构造对象
void destroy(pointer p);   // 析构对象

提升
1.实现日志分配器:记录内存分配和释放的大小、频率。
2.内存池分配器:为固定大小的对象优化内存分配。
3.堆外内存分配器:将数据存储在共享内存或 GPU 内存中。

相关文章:

  • matlab画图时如何屏蔽title等函数中缺省的latex解释
  • AI销售工具开发指南:关键技术点与行业解决方案
  • 在鸿蒙HarmonyOS 5中HarmonyOS应用开发实现QQ音乐风格的播放功能
  • C++ mutex 锁的使用
  • day27/60
  • 在鸿蒙HarmonyOS 5中实现抖音风格的草稿箱功能
  • 新能源知识库(34)什么是单一制和两部制
  • 经典的多位gpio初始化操作
  • JetBrains IntelliJ IDEA插件推荐
  • Spring MVC 核心枢纽:DispatcherServlet 的深度解析与实践价值
  • Zynq multi boot及网口远程更新开发
  • .Net框架,除了EF还有很多很多......
  • 简易版抽奖活动的设计技术方案
  • 数据库管理与高可用-PostgreSQL初体验
  • 安全编程期末复习34(红色重点向下兼容)
  • 8.1.排序的基本概念
  • ArkUI-X平台差异化
  • 函数中的Callable
  • Web安全漏洞详解及解决方案
  • 行业 |5G六年,互联网改变了什么?
  • 电商网站建设外包/病毒式营销
  • 任县网站建设/单页网站制作
  • b2c网站 方案/网络运营是做什么的
  • 青浦网站建设推广/seo外包
  • 杭州公司网站域名续费/小红书关键词排名
  • 深圳网站营销公司简介/商业软文代写