news 2026/7/21 5:42:55

高并发内存池:Part-1——定长内存池

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高并发内存池:Part-1——定长内存池
@bit::Shadow
✧(≖ ◡ ≖✿

目录

定长内存池

一:New()的初步设计

二:Delete()的设计

为什么不回退_memory?

完整代码gitee


定长内存池

有效、可分配内存块有两部分

1.有效内存池块。
2.自由链表管理区域。

构造函数

划分128kB给ObjectPool对象,异常抛出std::bad_alloc()。

New:为特定类型通过自由链表存储的/池内,分配固定空间大小。

Delete(const T* t):销毁指定目标。

一:New()的初步设计

_remainBytes:内存块内(自由链表内不计入大小)的剩余字节。

//申请 T* New() { int _sz = sizeof(T); //块内分配 if (_remainBytes <= _sz) { //剩余不足,新开大块 Alloc();//内存碎片问题不计 } T* obj = (T*)_memory; _memory += _sz; _remainBytes -= _sz; return obj; }

初步架构:

template<typename T> class ObjectPool//无并发性,外界统一接口? { private: void Alloc()//bool?抛异常与bool分隔。bool会增加处理成本 { //划分块 _memory = (char*)malloc(128 * 1024);//1.此处malloc不够纯粹,"其底层封装"(划掉) //※ //2.使用SystemAlloc更纯粹,后期对比效率时替换 if (!_memory) throw std::bad_alloc();//大块划分失败,怎么捕捉?与构造函数无关? _remainBytes = 128 * 1024;//※ } public: ObjectPool() :_memory(nullptr), _remainBytes(0) { Alloc(); } //**成员先走初始化列表,后走函数体内** //申请 T* New() { int _sz = sizeof(T); //块内分配 if (_remainBytes <= _sz) { //剩余不足,新开大块 Alloc();//内存碎片问题不计 } T* obj = (T*)_memory; _memory += _sz; _remainBytes -= _sz; return obj; } private: char* _memory;//内存块头指针(128kB) int _remainBytes;//内存块内(自由链表内不计入大小)的剩余字节 };

二:Delete()的设计

被删除任务删除头插进自由链表,由_freeList管理。

为什么不回退_memory?

销毁对象内存不一定连续。

设计图示

//释放,自由链表回收♻️ void Delete(const T* t) { //头插 *(void**)t = _freeList; //_freeList = t;//原因分析 _freeList = const_cast<T*>(t); }

✨亮点:

1.为兼容x64、x86系统使用指针这一随系统大小变换的类型作为,限制访问区域。
2.const_cast<template T> (T t); 去const属性 // 非std域!!

完整代码gitee

#pragma once //using namespace std:: #include<iostream> /* 设计原则: 1.模板元编程。基于T大小申请、管理内存块。 意味着: 单一类型对象,New固定T大小无法指定。不像(void*) maollc(sizeof(size_t size)) 2.定长内存池设计的目标是:体会"池化技术",这一高效、广泛应用技术的底层设计原理。 //严格遵循"高内聚,低耦合"特性 */ template<typename T> class ObjectPool//无并发性 { private: void Alloc()//bool?抛异常与bool分隔。bool会增加处理成本 { //划分块 _memory = (char*)malloc(128 * 1024);//1.此处malloc不够纯粹,"其底层封装"(划掉) //※ //2.使用SystemAlloc更纯粹,后期对比效率时替换 if (!_memory) throw std::bad_alloc();//大块划分失败,怎么捕捉?与构造函数无关? _remainBytes = 128 * 1024;//※ } T* FreeAlloc() { //自由链表分配 //if (!_freeList)//err if (_freeList) { T* obj = _freeList; //头删 _freeList = *(void**)_freeList; _remainBytes = _remainBytes; return obj; } return nullptr; } public: ObjectPool() :_memory(nullptr), _remainBytes(0), _freeList(nullptr) { Alloc(); } //**成员先走初始化列表,后走函数体内** //申请 T* New() { //1.自由链表分配 return FreeAlloc(); //int _sz = sizeof(T);因为自由链表要管理,所以至少给4/8 int _sz = sizeof(T) >= sizeof(T*) ? sizeof(T) : sizeof(T*); //dpsk:一个类型T*的指针管理T的空间与管理4T空间有什么区别? // 访问限制、算术法固定 //2.块内分配 if (_remainBytes <= _sz) { //剩余不足,新开大块 Alloc();//内存碎片问题不计 } T* obj = (T*)_memory;// _memory += _sz; _remainBytes -= _sz; return obj; } //释放,自由链表回收♻️ void Delete(const T* t) { //头插 *(void**)t = _freeList; //_freeList = t;//原因分析 _freeList = const_cast<T*>(t); } private: char* _memory;//内存块头指针(128kB) int _remainBytes;//内存块内(自由链表内不计入大小)的剩余字节 T* _freeList;//自由链表头 }; //测试类型T class TreeNode { private: int _val; TreeNode* _left; TreeNode* _right; };

感谢支持,长期连载
欢迎关注

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 5:41:04

工业设备智能诊断:WOA-TCN-BiLSTM-Attention混合模型实战

1. 项目概述&#xff1a;当工业设备遇上智能诊断工业设备的故障诊断一直是制造业的痛点问题。传统方法在面对振动信号、温度曲线这类复杂时序数据时&#xff0c;往往捉襟见肘——就像用老式收音机接收4K视频信号&#xff0c;虽然能听到声音&#xff0c;但丢失了大量关键信息。这…

作者头像 李华
网站建设 2026/7/21 5:41:02

AI人工智能随机森林分类器:原理、实现与应用

1. 引言在机器学习领域&#xff0c;随机森林&#xff08;Random Forest&#xff09;是一种强大且应用广泛的集成学习算法。它通过构建多棵决策树并综合它们的预测结果&#xff0c;有效提升了模型的准确性和鲁棒性&#xff0c;同时降低了过拟合的风险。随着人工智能&#xff08;…

作者头像 李华
网站建设 2026/7/21 5:40:05

ThinkBook 16+与16p对比:商务与性能本如何选?

1. 产品定位与核心差异解析 ThinkBook 16和16p这对"兄弟机型"最近在职场人群和内容创作者圈子里引发了热烈讨论。作为长期跟踪商务本市场的从业者&#xff0c;我拿到真机后第一感受是&#xff1a;这7000元差价背后藏着厂商对用户需求的精准切割。 ThinkBook 16走的是…

作者头像 李华
网站建设 2026/7/21 5:40:05

【SI_Mipi C PHY】快速了解Mipi C PHY协议

目录 1. Mipi C PHY概述 1.1. 背景与诞生 1.2. Mipi C PHY发展史 2. Mipi C PHY工作原理 2.1. Mipi C PHY框图介绍 2.2. Mipi C PHY工作模式 2.3. Mipi C PHY工作原理 2.3.1. 三态编码 2.3.2. 16bit/7 symbol 编解码框图介绍 2.3.3. 三态电平眼图介绍 1. Mipi C PHY概…

作者头像 李华
网站建设 2026/7/21 5:39:37

苏州湿地岛居别墅市场分析与价值解析

1. 苏州高端别墅市场现状与湿地岛居价值解析 苏州高端别墅市场近年来呈现出明显的分化趋势。根据2023年第二季度市场监测数据显示&#xff0c;苏州别墅类产品成交均价达到4.8万元/㎡&#xff0c;同比上涨12%&#xff0c;其中总价2000万以上的顶豪产品成交套数同比增长23%。在这…

作者头像 李华
网站建设 2026/7/21 5:38:34

Python自动化爬虫系统助力TR-B期刊论文高效筛选

1. 论文速递 | TR-B 1月文章精选&#xff1a;学术前沿高效追踪指南 作为科研工作者&#xff0c;每个月都有数百篇新论文发表在各类期刊上。如何在信息爆炸的时代高效获取最有价值的学术成果&#xff1f;今天我想分享一个持续运作的论文筛选机制&#xff0c;专门针对TR-B&#x…

作者头像 李华