测试boost内存池

从内存池派生的boost::container测试程序 boost::container是C++ Boost库中提供的一个容器库,该库为用户提供了一些标准容器库没有提供的容器类型和额外的功能。boost::container库的一个主要特点就是其内存管理方式,它支持将容器的内部内存使用者从堆内存转移到栈内存或另一种内存池。总结一下,本文演示了如何使用boost::container实现一个简单的内存池派生的vector容器。从输出结果可以看出,我们的SimpleVector实现以及成功的在boost::pool内存池中实现了vector容器,并能正常工作。 阅读详情

最近测试了一下boost线程池,向大家公布一下测试结果,本测试在单线程环境下进行,

 boost::pool实用单线程内存方法

 boost::singleton_pool适用多线程内存访问

测试代码如下


struct Student
{
	char name[8];
};

void heapAllocate()
{
	CExecTimer timer;

	Student* array[1000];

	for (int i=0;i<5000;i++)
	{
		for (int j=0;j<1000;j++)
		{
			array[j]=new Student;
		}

		for (int j=0;j<1000;j++)
		{
			delete array[j];
		}
	}
}

void boostAllocate()
{
	boost::pool<> student_pool(sizeof(Student));

	CExecTimer timer;

	Student* array[1000];

	for (int i=0;i<5000;i++)
	{
		for (int j=0;j<1000;j++)
		{
			array[j]=(Student*)student_pool.malloc();
		}

		for (int j=0;j<1000;j++)
		{
			student_pool.free(array[j]);
		}
	}
}

typedef struct singleton_pool_tag
{

}singleton_pool_tag;

typedef boost::singleton_pool<singleton_pool_tag,sizeof(Student)>  global;

void boostSingletonAllocate()
{
	CExecTimer timer;

	Student* array[1000];

	for (int i=0;i<5000;i++)
	{
		for (int j=0;j<1000;j++)
		{
			array[j]=(Student*)global::malloc();
		}

		for (int j=0;j<1000;j++)
		{
			global::free(array[j]);
		}
	}
}

其中更改name数组的大小来设置分配单元大小



分配单元大小普通堆分配用时boost::pool用时boost::singleton_pool用时
8字节2620 milli seconds1420 milli seconds4493 milli seconds

分配单元大小普通堆分配用时boost::pool用时boost::singleton_pool用时
128字节2871 milli seconds1419 milli seconds4508 milli seconds

分配单元大小普通堆分配用时 boost::pool用时boost::singleton_pool用时
256字节 3136 milli seconds1419 milli seconds4509 milli seconds
1K4306 milli seconds1435 milli seconds4539 milli seconds
2K9048 milli seconds1451 milli seconds4555 milli seconds



分配单元大小普通堆分配用时boost::pool用时boost::singleton_pool用时
4K20671 milli seconds1779 milli seconds4930 milli seconds

分配单元大小普通堆分配用时boost::pool用时boost::singleton_pool用时
8K20671 milli seconds1779 milli seconds4930 milli seconds


有以上数据分析出,boost::pool性能始终最优(因其无锁),当分配单元小于1K时,boost::singleton_pool性能甚至比不过正常的内存分配,当分配单元大于1K时,

boost::singleton_pool的优势才会逐渐显示

若有同学认为有需要探讨的地方,一定要留言哦!

PS, 今天在自己的机器上又测试了一下,临界值变为2K,faint!

使用boost::container模块实现虚拟测试内存池 首先需要了解什么是内存池。而内存池技术通过一次性分配一块较大的内存,然后按需将内存分配给程序使用,从而避免了频繁的内存申请和释放,进而提高了程序效率。代码中,我们使用了boost::container::pool类来实现内存池。此外,boost::container::pool还提供了其他方法,比如说可以预先分配一定数量的内存等。总之,使用boost::container模块实现虚拟测试内存池是一种非常有效的内存管理方式。接下来我们将看到如何使用boost::container模块实现一个虚拟测试内存池。 阅读详情

相关推荐

boost内存池

boost内存池

C++函数的Boost内存池性能介绍

Boost内存池,即boost.pool库,是由Boost提供的一个用于内存池管理的开源C++库。作为Boost中影响较大的一个库,Pool已经被广泛使用。可以毫不夸张的说,Boost是目前影响最大的通用C++库。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容,是一个"准"标准库。         1. 什么是内存池"池"是在计算机技术中经常使用的

记事本 2237

用Docker-Compose三节点部署生产级Doris集群:从配置文件到故障转移

本文详细介绍了如何使用Docker-Compose部署一个生产级的三节点Apache Doris集群。内容涵盖从核心架构理解、配置文件编写到集群初始化验证的全过程,并重点讲解了如何实现高可用、数据持久化、健康检查以及故障转移等生产级运维关键点,为中小团队提供了一种在容器化便利性与系统稳定性间取得平衡的可靠部署方案。

kkk56的博客 857

boost之memory pool

singleton_pool分配的内存一般以release_memory/purge_memory方式释放 内存分配失败一般返回0 odered vs unorder: 都用链表维护,前者维护顺序,后者不维护,"顺序"指以分配的内存地址排序 前者优缺点:分配一组数据很方便,但释放可能比较复杂O(n) 后者优缺点:分配和释放都很快,但分配也有可能很慢,pool在查找的过程中不知道后面还有大块内存

pud_zha的专栏 4938

redhawk-sc(seascape)学习日志2

design view是主view,是所有seascape view中最root的部分,一个design view可以驱动多种类型分析比如静态IR drop,动态IR drop以及EM.这些分析可以在不同的PVT和翻转率下.Design view是一个必须的view对于redhawk中的任何类型分析来说。seascape view相当于一个容器,用于保存各种和设计相关的数据,类似于逻辑信息、物理信息等等,每个view都有其对应的输入件和依赖,这些view都是redhawk用于各种类型的分析所需。

qq_39493558的博客 3497

Vivado Combinatorial Loop Alert问题 [DRC LUTLP-1]

Vvado综合和布局布线都通过了但是无法生成bit文件,提示Combinatorial Loop Alert,错误如下图。在RTL图中可以看到LUT的输出连接到了输入上,这个就是。在代码中我并未找到导致这种情况发生的地方,如果遇到类似的问题先检查自己的代码是不是存在组合逻辑连接出现了问题,如果没问题再考虑通过设置去解决问题。

伊丽莎白的学习之路 6031

boost之内存池

pool是最简单也最容易使用的内存池类,可以返回一个简单数据类型((POD)R的内存指针。它位于名字空间boost,需要包含头文件,即:pool的模板类型参数UserAllocator是一个用户定义的内存分配器,它实现了特定的内存分配算法,通常可以直接用默认的default_user_allocator_new_delete,它内部使用new [ ]和 delete[]分配内存。

qq_62309585的博客 1501

ros2的unity仿真配置(ros2-for-unity)

可以看到unity中输出了Hello World,验证完毕!可以看到unity上监听的/chatter。

m0_63671696的博客 4093

boost库 内存池

简单轻量:它是一个基础的内存管理工具,实现简单,开销较小。高效:通过维护内存块列表,可以快速分配和回收内存。可定制:提供了许多可配置的选项,如内存块大小、对齐方式等。可重用:可以被上层的内存池实现 (如) 重复利用。内存池管理Boost.Pool 提供了两种主要的内存池实现:和。它们都利用来管理内存块,提高内存利用率和缓存命中率。固定大小对象管理Boost.Pool 专注于管理固定大小的对象,这种设计能够提高内存管理的效率。它使用连续的内存块来存储这些对象,避免了频繁的new和。

weixin_50873490的博客 1846

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 330

【DDR3 控制器设计】(1)MIG IP 核的详解与配置

2:1 比例的用户接口数据总线宽度是 MIG 内存接口宽度的 4 倍,比如 MIG 中配置的数据位宽是 16 位,而 DDR 双边采样,所以用户接口是 MIG 内存接口的 4 倍即数据位宽为 64 位,同理可以得到如果设置为 4:1 则是 8 倍的数据位宽即数据位宽为 128 位。这里选择不使用OFF。以下为 MIG 和 DDR 之间的连接框图,可以看到框图的左边是用户接口,中间是 MIG 核,右边是需要控制的 DDR 接口,用户只需要去配置使用 MIG 核,就可以对 DDR 进行控制读写等操作。

记录学习历程 5359

C++ | boost 库之内存池

内存池是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升。 boost.pool 库基于简单分隔存储的思想实现了一个快速、紧凑的内存池库,不仅能够管理大量的对象,还可以用作 STL 的内存分配器。在某种程度上讲,它近似于一个小型的垃圾回收机制,在需要大量分配/释放小对象时其效率很高,而且完全不需要考虑 delet...

该用户还没想到好的昵称的博客 2160

【2025软考高级架构师】论文篇——4、论可靠性系统中软件容错技术的应用

软件容错技术对软件的稳定性起着至关重要的作用,尤其是针对互联网性质的软件并发高存在流量峰值等问题,软件容错技术的应用的重要性就不言而喻了。经过这次我所采用的软件容错技术的方法和措施的实施效果后,使我也看到了自己身上的不足之处,我会在今后的架构设计过程中,不断更新自己的知识,不断完善自己的架构设计领域,设计出更好的软件架构,更好的支撑业务平台的运行,提高公司的竞争力,为公司为社会尽一份绵薄之力。

qq837993702的博客 619

开源C++函数库Boost内存池使用与测试

oost库是一个可移植的开源C++函数库,鉴于STL(标准模板库)已经成为C++语言的一个组成部分,可以毫不夸张的说,Boost是目前影响最大的通用C++库。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容,是一个“准”标准库。   Boost内存池,即boost.pool库,是由Boost提供的一个用于内存池管理的开源C++库。作为Boost中影响较大

DSIslander的专栏 1515

企业财务共享服务中心业务蓝图规划方案【附全文阅读】

《企业财务共享服务中心业务蓝图规划方案》为集团企业提供财务共享中心建设全流程指导,涵盖战略定位、组织架构、业务流程、信息系统、运营管理和变革实施六大维度。方案明确共享中心"交易处理+战略支撑"双重职能,设计专业分组架构,筛选标准化高、价值明确的流程(如核算、资金结算等)纳入共享范围,构建业财一体化平台,并配套绩效与风险管控体系。结合项目型企业管理特点,分阶段推进实施,助力企业实现财务集中化与标准化转型。

cdfunlove的博客 994

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Boost内存池使用与测试

目录 Boost内存池使用与测试 什么是内存池 内存池的应用场景 安装 内存池的特征 无内存泄露 申请的内存数组没有被填充 任何数组内存块的位置都和使用operator new[]分配的内存块位置一致 ...

weixin_30348519的博客 105

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

linux boost内存池,开源C++函数库Boost内存池使用与测试

【IT168 专稿】Boost库是一个可移植的开源C++函数库,鉴于STL(标准模板库)已经成为C++语言的一个组成部分,可以毫不夸张的说,Boost是目前影响最大的通用C++库。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容,是一个“准”标准库。Boost内存池,即boost.pool库,是由Boost提供的一个用于内存池管理的开源C++库。作为Boo...

weixin_35212670的博客 403

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Boost 使用方法
下一篇: 编译文件版本号自动增长
xbgprogrammer
博客等级 码龄20年 36粉丝 106原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值