今天你学C++了吗?——C++中的STL

embedded/2025/1/20 12:17:00/


♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥

♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥

♥♥♥我们一起努力成为更好的自己~♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥

♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥

✨✨✨✨✨✨ 个人主页✨✨✨✨✨✨

在前面我们已经学习了C++的重要部分——类与对象,这一篇博客,我们将开启新部分的内容学习——C++中STL~

准备好了吗~我们发车啦~🚗🚗🚗🚗🚗🚗

什么是STL

STL(standard template libaray- 标准模板库 ) C++ 标准库的重要组成部分 ,不仅是一个可复用的 组件库,而且 是一个包罗数据结构与算法的软件框架

STL的六大组件

六大组件

STL的六大组件是仿函数空间配置器算法容器迭代器配接器~

容器可以理解成数据结构(后面我们会进行详细讲解)

空间配置器也就是内存池

内存池

这里我们来简单说说内存池的概念~

内存池是一种高效的内存管理技术,其核心在于预先从操作系统申请大块连续的内存空间,并将其划分成多个小块以供后续快速分配和回收

内存池概述

内存池技术旨在解决传统内存分配方式中性能瓶颈和内存碎片化的问题。在程序运行过程中,频繁的内存分配和释放操作不仅会增加系统的开销,还可能导致内存碎片的产生,从而降低内存利用率和程序的性能。内存池通过预先分配大块内存并进行有效管理,实现了内存分配的快速响应和内存碎片的减少。

工作原理

内存池的工作原理主要包括预分配、分割、分配和回收四个步骤。在程序启动或初始化阶段,内存池会向操作系统申请一块足够大的内存空间,并将其划分为多个小块。这些小块内存可以根据需求进行固定大小或可变大小的分配。当程序需要内存时,它会向内存池发出请求,内存池会迅速分配一个合适的内存块。当程序不再需要该内存块时,它会将其归还给内存池,以便后续的重用。

内存池优势

内存池的优势主要体现在以下几个方面:

  1. 提高内存分配效率:由于内存池预先分配了大块内存,并进行了有效的管理,因此当程序需要内存时,可以直接从内存池中获取,而无需等待操作系统的响应。这大大缩短了内存分配的时间,提高了程序的运行效率。

  2. 减少内存碎片:内存池通过管理内存块的分配和回收,可以有效地避免内存碎片的产生。当程序释放内存块时,内存池会将其重新纳入管理范围,以便后续的分配请求可以重用这些内存块。这有助于确保内存的连续性和完整性,提高内存利用率。

  3. 可控性强:内存池的设计允许程序员根据实际需求进行定制化的配置。例如,可以设置内存池的大小、内存块的大小以及回收策略等。这有助于程序员更好地控制内存的使用情况,避免内存泄漏和浪费等问题。

应用场景与挑战

内存池技术在许多性能要求较高的场景中有广泛应用。例如,在嵌入式系统中,由于资源受限,优化内存使用对于系统的稳定性和性能至关重要。内存池可以帮助嵌入式系统更有效地管理内存资源,确保系统的正常运行。此外,在实时系统和游戏开发中,内存池也发挥着重要作用。实时系统需要快速响应各种请求,包括内存分配请求,而内存池可以提供快速的内存分配和回收服务。在游戏开发中,内存池可以帮助开发者更有效地管理动态内存分配和释放操作,确保游戏的流畅性和稳定性。

然而,内存池技术也面临一些挑战。首先,内存池的设计和实现相对复杂,需要考虑多种因素,如内存分配策略、内存碎片整理等。这增加了开发和维护的难度。其次,如果内存池的大小不合适或者内存块的大小设置不合理,可能会导致内存浪费问题。因此,在使用内存池时,需要仔细评估实际需求并进行合理的配置。

画图理解

这就是STL的基本概念了,接下来的博客,我们将来看看STL的具体内容~我们下篇博客再见~


♥♥♥本篇博客内容结束,期待与各位优秀程序员交流,有什么问题请私信♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥

✨✨✨✨✨✨个人主页✨✨✨✨✨✨



http://www.ppmy.cn/embedded/155483.html

相关文章

嵌入式知识点总结(一)-C/C++关键字

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.C语言宏中"#“和"##"的用法 1.1.(#)字符串化操作符 1.2.(##)符号连接操作符 2.关键字volatile有什么含意?并举出三个不同的例子? 2.1.并行设备的硬件寄存…

JavaScript 代码规范

JavaScript 代码规范 1. 引言 JavaScript 是一种广泛使用的编程语言,尤其在网页开发中占据重要地位。为了确保代码的质量、可读性和可维护性,遵循一套统一的代码规范至关重要。本规范旨在为 JavaScript 开发者提供一个清晰、一致的编码标准,以促进团队合作和代码共享。 2…

RocketMQ中的一些细节

1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…

【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件

🔥 目录 1. 控件概述 控件体系的发展阶段 2. QWidget 核心属性 2.1 核心属性概览2.2 用件可用(Enabled) 2.3 坐标系(Geometry) **实例 1: 控制按钮的位置**实例 2: 表白 程序 2.4 窗口标题(windowTiltle&a…

与“神”对话:Swift 语言在 2025 中的云霓之望

0. 引子 夜深人静,是一片极度沉醉的黑,这便于我与深沉的 macbook 悄悄隐秘于其中。一股异香袭来,恍惚着,撸码中身心极度疲惫、头脑昏沉的我仿佛感觉到了一束淡淡的微光轻洒在窗边。 我的对面若隐若现逐渐浮现出一个熟悉的身影。他…

栈与队列原理解析

13.3 栈的原理解析 13.3.1 栈的特性 ​ 只允许在一端进行插入或删除操作的线性表。 13.3.2 栈的基本操作 13.3.3 顺序存储实现栈 !!! 一开始top-1,即链表为空的时候。top从0开始记元素,和数组一样。当top等于MaxSize-1时&#…

C++/C语言判断重复数组(zznu)⭐

问题描述 如果一个数组中不包含重复的元素&#xff0c;那么我们称这个数组是独ONE无TWO的数组。给定一个数组&#xff0c;请你判断这个数组是否是独ONE无TWO的。 输入 首先输入一个正整数n表示数组的长度&#xff08;0<n<100&#xff09;。 接下来输入n个整数&#xff08…

MySQL 创建数据库问题:You have an error in your SQL syntax(MySQL 数据库命名规则问题)

问题描述与处理策略 1、问题描述 CREATE DATABASE my-shop-db;执行上述 SQL 语句&#xff0c;报如下错误 CREATE DATABASE my-shop-db > 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right s…