C++ 实现高性能内存池
Posted 蓝桥云课精选
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 实现高性能内存池相关的知识,希望对你有一定的参考价值。
前言:
在 C/C++ 中,内存管理是一个非常棘手的问题,我们在编写一个程序的时候几乎不可避免的要遇到内存的分配逻辑,这时候随之而来的有这样一些问题:是否有足够的内存可供分配? 分配失败了怎么办? 如何管理自身的内存使用情况? 等等一系列问题。
在一个高可用的软件中,如果我们仅仅单纯的向操作系统去申请内存,当出现内存不足时就退出软件,是明显不合理的。
正确的思路应该是在内存不足的时,考虑如何管理并优化自身已经使用的内存,这样才能使得软件变得更加可用。
小编今天介绍的项目就是用C++实现一个内存池,并使用一个栈结构来测试内存池提供的分配性能。
项目名称:
【C++ 实现高性能内存池】
项目简介:
获得内存池所分配的内存速度高于从堆中获得分配的内存的速度,一个长期稳定运行的服务在追求极致的过程中,实现内存池是必不可少的。和标准库中的默认分配器一样,内存池本质上也是分配器。该项目设计并使用 C++实现一个高性能内存池。
涉及的知识点:
C++ 中的内存分配器 std::allocator
内存池技术
手动实现模板链式栈
链式栈和列表栈的性能比较
内存池简介:
内存池是池化技术中的一种形式。
通常我们在编写程序的时候回使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每次申请内存和释放内存的时候,都需要和操作系统的系统调用打交道,从堆中分配所需的内存。
如果这样的操作太过频繁,就会找成大量的内存碎片进而降低内存的分配性能,甚至出现内存分配失败的情况。
而内存池就是为了解决这个问题而产生的一种技术。
从内存分配的概念上看,内存申请无非就是向内存分配方索要一个指针,当向操作系统申请内存时,操作系统需要进行复杂的内存管理调度之后,才能正确的分配出一个相应的指针。而这个分配的过程中,我们还面临着分配失败的风险。
所以,每一次进行内存分配,就会消耗一次分配内存的时间,设这个时间为 T,那么进行 n 次分配总共消耗的时间就是 nT;如果我们一开始就确定好我们可能需要多少内存,那么在最初的时候就分配好这样的一块内存区域,当我们需要内存的时候,直接从这块已经分配好的内存中使用即可,那么总共需要的分配时间仅仅只有 T。当 n 越大时,节约的时间就越多。
——以上内容截选自项目【C++ 实现高性能内存池】
想要了解更多关于内存池的知识,以及该项目的开发思路、代码,点击最下方的“阅读原文”,即可马上查看了~
在线开发环境:
当然,实验楼给每个学习者都提供了在线的开发环境,可以随时跟着教程动手操作学习,毕竟动手才是撸代码的正确姿势!!
在线开发环境示意图
点击“阅读原文”,即可查看如何用C++实现高性能的内存池了~
以上是关于C++ 实现高性能内存池的主要内容,如果未能解决你的问题,请参考以下文章