ACE内存池管理器积累

news2024/9/24 23:24:52

源起

近来由于研究ACE内存分配的组件,想做一个应用程序级的内存管理,有人还想自己写一个,我觉得可以直接用ACE自己提供的内存管理器,避免重复发明轮子。

结合以前认识,和前辈们的积累,觉得可以记下来一些知识!

ACE Allocator体系

内存分配体系

ACE_Stattic_Allocator<POOL_SIZE>

此静态内存分配器定内存大小,内部remove接口为空实现,所以,分配器的内存在程序退出时依然可以保留,能够起到类似静态内存的效果。

此内存分配器体现为连续一整块内存,将会具有访问速度上的优势,以及可以避免内存碎片!

注意此类不具有锁策略,建议在线程安全的情况下使用,例如,利用线程变量或加锁

此类可以分配在静态内存区域,或堆上
在只申请内存、不释放内存,但是总量有限的场合将非常适用

ACE_Cached_Allocator和ACE_Dynamic_Cachee_Allocator

两个类都是定内存大小和定分配个数的内存管理池,它俩最大的区别就在于分配是具有字节概念,还是具有某个简单类型概念,分别可以提供内存池或简单对象池的服务。

考虑到内存池都不会设定无限大小,所以,这种内存池也非常有其使用的场合

具有可扩展的锁策略
对象归还分配器时,如果存在某些特殊的资源,需要释放,则依赖调用方主动编码

ACE_Allocator_Adapter< MALLOC >

此类可以整合变长、个数不定的内存池管理器ACE_Malloc成为Allocator分配器

ACE_Malloc和Allocator的重大区别

  • Allocator
    • Allocator两个Cached类基于定大小、定个数的内存池管理
    • 其中静态分配器值得注意,在某些只申请不释放的场景,将连续内存具有访问优势
  • ACE_Malloc提供了更丰富的、面向字节的内存池管理,内存池可以变长、变个数,分配时在池中寻找最佳匹配,不足时进行立即分配
    • ACE_Allocator_Adapter将变长内存池管理器MALLOC包装成Allocator
    • 其他*Memory_Pool组件,可以将ACE_Malloc的内存池管理扩展到更宽的面

对ACE基于模板开发的新认识

  • 一个组件仅解决一个小问题,通过组合方式,或浅层次继承实现扩展
  • 更多使用模式,以及模板的弱类型限制能力,实现代码的自动生成、扩展

ACE在基类使用虚析构函数反而用的并不多,后面有空探究下它这方面的设计哲学

参考

man ACE Allocator

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/900256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AutoLayout案例3 Objective-C语言】

一、咱们接下来,再把这个案例实现一下 1.要求, 1)在控制器的顶部,有两个UIView,一个是蓝色View,一个是红色View 2)这两个UIView的高度,永远是相等的,蓝色和红色的高度是相等的,都是50 3)红色View和蓝色View,是右对齐的 4)蓝色View,距离父控件的左边、上边、右…

双指针算法实例1(移动零)

常⻅的双指针有两种形式&#xff1a; 1 对撞指针&#xff08;左右指针&#xff09;&#xff1a; a 对撞指针从两端向中间移动。⼀个指针从最左端开始&#xff0c;另⼀个从最右端开始&#xff0c;然后逐渐往中间逼 近 b 终止条件一般是两指针相遇or错过&#xff08;也可能在循…

VMWare Workstation 网络设置 桥接模式 网络地址转换(NAT)模式 仅主机模式

文章目录 网络模式配网要求CentOSDHCP虚拟网络桥接模式默认配置测试手动配置测试 网络地址转发模式 (NAT) 网络模式 桥接模式: 主机与虚拟机对等, 虚拟机注册到主机所在的局域网, 会占用该网络的IP该局域网内的所有机器, 包括主机和其他机器和所有虚拟机, 均可互相访问 网络地…

ElasticSearch索引库、文档、RestClient操作

文章目录 一、索引库1、mapping属性2、索引库的crud 二、文档的crud三、RestClient 一、索引库 es中的索引是指相同类型的文档集合&#xff0c;即mysql中表的概念 映射&#xff1a;索引中文档字段的约束&#xff0c;比如名称、类型 1、mapping属性 mapping映射是对索引库中文…

ORA-600 ksuloget2 恢复----惜分飞

客户在win 32位的操作系统上调至sga超过2G,数据库运行过程中报ORA-600 ksuloget2错误 Thread 1 cannot allocate new log, sequence 43586 Checkpoint not complete Current log# 1 seq# 43585 mem# 0: D:\ORACLE\ORADATA\ORCL\REDO01.LOG Fri Aug 04 14:57:02 2023 Errors i…

正则表达式:贪婪与非贪婪模式

正则中的三种模式&#xff0c;贪婪匹配、非贪婪匹配和独占模式。 在这 6 种元字符中&#xff0c;我们可以用 {m,n} 来表示 &#xff08;*&#xff09;&#xff08;&#xff09;&#xff08;?&#xff09; 这 3 种元字符&#xff1a; 贪婪模式&#xff0c;简单说就是尽可能进行…

激活函数总结(十三):Tanh系列激活函数补充(LeCun Tanh、TanhExp)

激活函数总结&#xff08;十三&#xff09;&#xff1a;Tanh系列激活函数补充 1 引言2 激活函数2.1 LeCun Tanh激活函数2.2 TanhExp激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、…

pytorch 42 C#使用onnxruntime部署内置nms的yolov8模型

在进行目标检测部署时,通常需要自行编码实现对模型预测结果的解码及与预测结果的nms操作。所幸现在的各种部署框架对算子的支持更为灵活,可以在模型内实现预测结果的解码,但仍然需要自行编码实现对预测结果的nms操作。其实在onnx opset===11版本以后,其已支持将nms操作嵌入…

2.基于SpringBoot3集成SpringDoc Swagger3

1. 引入依赖 我们在build.gradle中引入依赖 implementation org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0 implementation org.springdoc:springdoc-openapi-starter-webmvc-api:2.1.02. 新增SpringDocConfig.java文件 Configuration public class SpringDocCo…

ElasticSearch 数据聚合、自动补全(自定义分词器)、数据同步

文章目录 数据聚合一、聚合的种类二、DSL实现聚合1、Bucket&#xff08;桶&#xff09;聚合2、Metrics&#xff08;度量&#xff09;聚合 三、RestAPI实现聚合 自动补全一、拼音分词器二、自定义分词器三、自动补全查询四、实现搜索款自动补全&#xff08;例酒店信息&#xff0…

【图论】最短路的传送问题

一.分层图问题&#xff08;单源传送&#xff09; &#xff08;1&#xff09;题目 P4568 [JLOI2011] 飞行路线 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) &#xff08;2&#xff09;思路 可知背景就是求最短路问题&#xff0c;但难点是可以使一条路距离缩短至0&#xf…

excel逻辑函数篇2

1、IF(logical_test,[value_if_true],[value_if_false])&#xff1a;判断是否满足某个条件&#xff0c;如果满足返回一个值&#xff0c;如果不满足则返回另一个值 if(条件,条件成立返回的值,条件不成立返回的值) 2、IFS(logical_test1,value_if_true1,…)&#xff1a;检查是否…

虚拟机问题

虚拟机无法识别USB设备 经排查为VMware USB Arbitration Service 没有启动,但是VMware USB Arbitration Service依赖于VMware Workstation Server启动 VMware USB Arbitration Service(VMUSBArbService)是由 VMware 虚拟化软件提供的一个服务,用于协调和管理主机系统上的…

每日一题——接雨水(单调栈)

接雨水——单调栈 题目链接 单调递增的栈还是单调递减的栈 我们常说的**”积水成洼“**&#xff0c;指的就是说&#xff1a;当两边地势高于中间的地势时&#xff0c;中间的区域就成了洼地&#xff0c;也就可以积水了。 这一题就是如此&#xff0c;我们需要通过一个栈来记录数…

UE4中关于利用粒子系统做轨迹描绘导致系统流畅性下降的问题

UE4中关于利用粒子系统做轨迹描绘导致系统流畅性下降的问题 文章目录 UE4中关于利用粒子系统做轨迹描绘导致系统流畅性下降的问题前言假设及验证1. 过多的粒子发射器影响仿真系统2. 粒子数目太多&#xff0c;降低粒子发射频率&#xff0c;同时增大粒子显示范围3. 把信息输出到屏…

揭秘程序员的鄙视链,你在哪一层?看完我想哭

虽然不同的编程语言都有其优缺点&#xff0c;而且程序员之间的技能和能力更加重要&#xff0c;但是有些程序员可能会因为使用不同的编程语言而产生鄙视链。 以下是一些可能存在的不同编程语言程序员之间的鄙视链&#xff1a; 低级语言程序员鄙视高级语言程序员&#xff1a;使用…

Java教程:如何使用切面环绕方法对所有接口进行添加出入参日志保存功能

背景&#xff1a; ----在很多时候我们做开发时&#xff0c;往往只是提供一个对外接口来进行前后端调试&#xff0c;或第三方系统联调&#xff0c;并使用log进行日志打印&#xff0c;每当出现问题进行排查时&#xff0c;只需要查看服务器日志就可以定位到问题&#xff0c;从而解…

Three.js程序化3D城市建模【OpenStreetMap】

对于我在 Howest 的研究项目&#xff0c;我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。 我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中&#xff0c;随后我将对其进行动画处理 推荐&#xff1a;用 NSDT编辑器 快速搭…

在抽象类中使用@Autowired注入其他bean

概述 今天写代码时&#xff0c;使用模板设计模式&#xff0c;需要在抽象类中使用Autowired注入指定的Bean&#xff0c;然后调用指定方法。 问题 发现Autowired注解有红色下划线 解决 其实没有什么关系&#xff0c;只要实现类继承这个抽象方法&#xff0c;然后加入IOC容器&am…

深入理解SSO原理,项目实践使用一个优秀开源单点登录项目(附源码)

深入理解SSO原理,项目实践使用一个优秀开源单点登录项目(附源码)。 一、简介 单点登录(Single Sign On),简称为 SSO。 它的解释是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 ❝ 所谓一次登录,处处登录。同样一处退出,处处退出。 ❞ 二…