
c++
文章平均质量分 91
从指针、模板编程、functional出发,深入解析 STL 容器 / 算法的底层实现逻辑(如 vector 内存扩容策略、unordered_map 哈希冲突处理),结合内存池设计(对象池、内存碎片优化)与缓存置换算法(LRU/LFU 实战实现)等高性能场景需求,通过代码案例演示内存管理技巧与性
achene_ql
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++编译过程与GDB调试段错误和死锁问题
本文详细介绍了C++程序的编译流程和GDB调试技巧。编译过程包含预处理、编译、汇编和链接四个阶段,每个阶段都可能出现特定错误,如宏定义错误、语法错误或链接错误等。文章重点讲解了GDB调试工具的使用方法,包括常用命令如断点设置、变量查看、单步执行等,并针对常见问题如段错误和死锁提供了具体调试方案。通过生成Core文件分析段错误,以及使用线程调用栈追踪死锁位置,帮助开发者快速定位和解决程序运行中的问题。掌握这些编译和调试技巧能显著提升C++开发效率。原创 2025-08-03 18:32:01 · 256 阅读 · 0 评论 -
深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C++ 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。原创 2025-06-09 00:36:42 · 1538 阅读 · 0 评论 -
c++ 指针篇(一)常量指针、指针常量、常量指针常量讲解及声明规则解析(为什么const位置不同带来的特性也不同)
本篇文章将从什么是常量指针、指针常量、常量指针常量和为什么const位置不同,特性和用法不同两个方面解析。原创 2025-04-09 15:49:47 · 584 阅读 · 0 评论 -
c++ 指针篇(二)指针函数、函数指针、指针函数指针
是一种函数,其返回值为指针。原创 2025-04-09 16:59:53 · 339 阅读 · 0 评论 -
c++ 指针篇(三)指针数组、数组指针、指针数组指针
指针数组指针是一个指针,它指向一个指针数组。指针数组是一个数组,数组内每个元素都是指针。数组指针是一个指针,它指向一个数组。原创 2025-04-09 18:38:33 · 188 阅读 · 0 评论 -
c++ 指针篇(四)结构体、结构体指针、结构体指针数组
结构体是一种用户自定义的数据类型,它可以将不同类型的数据组合在一起,形成一个新的数据类型。结构体中的每个数据项称为成员。结构体指针数组是一个数组,数组中的每个元素都是指向结构体的指针。结构体指针是指向结构体变量的指针,它存储的是结构体变量的地址。原创 2025-04-09 18:55:14 · 293 阅读 · 0 评论 -
C++ 智能指针:内存管理的神器
在 C++ 的编程世界里,内存管理一直是一个让人又爱又恨的话题。手动管理内存,就像是在走钢丝,稍有不慎就会陷入内存泄漏、悬空指针等可怕的陷阱。不过,C++ 为我们提供了智能指针这一强大的工具,它就像是一位贴心的内存管家,能够帮助我们更安全、更轻松地管理内存。今天,就让我们一起深入探秘 C++ 智能指针的奥秘。原创 2025-05-06 09:00:00 · 1081 阅读 · 0 评论 -
多线程编程中的重要概念
在计算机科学领域,并行和并发是两个至关重要却又容易混淆的概念。理解它们的差异,对于编写高效的多线程程序以及合理利用系统资源有着深远意义。原创 2025-06-03 15:51:05 · 1107 阅读 · 0 评论 -
万字长文详解 C++ 面向对象编程:从基础到高级的深度探索
在 C++ 的世界里,面向对象编程(Object - Oriented Programming,OOP)是其核心编程范式之一,它就像一座大厦的基石,支撑起无数复杂而强大的软件系统。C++ 面向对象编程涵盖了丰富的概念和特性,从类与对象的基础构建,到多态、继承等高级特性,每一个部分都充满了智慧与技巧。接下来,让我们深入探索 C++ 面向对象编程的各个方面。原创 2025-05-04 16:17:17 · 1284 阅读 · 0 评论 -
C++ 重载:解锁符号与函数的 “变形魔法”
运算符重载是 C++ 重载机制中最具魅力的部分之一。它允许我们为自定义的类定义运算符的行为,使得自定义类型能够像 int、float 等内置类型一样进行运算。不过,在进行运算符重载时,参数个数的确定是一个关键问题,需要我们仔细斟酌。参数个数的确定:运算符重载中,成员函数和全局函数的参数个数不同,要根据运算符的特性和使用场景选择合适的重载方式。特别是对于递增运算符的前置和后置形式,参数个数和实现逻辑都有差异,需要重点掌握。返回值类型:不同的运算符重载对返回值类型有特定要求,如左移运算符必须返回。原创 2025-05-05 12:59:47 · 957 阅读 · 0 评论 -
C++ 友元:打破封装的钥匙
友元(Friend)是 C++ 提供的一种突破类封装性的机制。通过将一个函数或类声明为另一个类的友元,那么这个函数或类就可以访问该类的私有和保护成员。需要注意的是,友元机制是对类封装性的一种破坏,但在特定场景下,它能带来极大的便利。友元函数是一种特殊的函数,它虽然不是类的成员函数,但却可以访问类的私有和保护成员。要将一个函数声明为类的友元函数,只需在类的定义中使用friend关键字即可。int height;public:// 声明友元函数。原创 2025-05-03 15:22:25 · 622 阅读 · 0 评论 -
C++ 泛型编程与完美转发:解锁代码复用与抽象的世界
在 C++ 的编程领域中,泛型编程宛如一把神奇的钥匙,为开发者打开了代码复用和抽象的全新大门。它让我们能够编写更加通用、灵活且高效的代码,极大地提升了开发效率和代码质量。接下来,就让我们一同深入探索 C++ 泛型编程的奥秘。原创 2025-05-07 09:00:00 · 901 阅读 · 0 评论 -
一文吃透 C++ STL 标准模板库!两万字详解进阶之路
在 C++ 的世界里,STL(Standard Template Library,标准模板库)就像是一个装备齐全的超级工具箱,里面装满了各种高效、实用的工具,帮助开发者快速解决数据存储、处理和算法实现等问题。无论是新手程序员还是经验丰富的开发者,STL 都是 C++ 编程中不可或缺的得力助手。接下来,就让我们一起深入探索这个神奇的工具箱,领略它的强大魅力。原创 2025-05-07 15:03:17 · 1010 阅读 · 0 评论 -
解锁 C++ 编程新姿势:深入理解 std::function
作为 C++ 标准库中一个非常强大且实用的工具,为我们处理可调用对象提供了极大的便利和灵活性。它就像一个万能的 “瑞士军刀”,无论是普通函数、函数对象还是 lambda 表达式,都能被它轻松收纳和调用。通过合理运用,我们可以编写出更加通用、灵活和易于维护的代码。然而,就像任何工具都有其优缺点一样,也存在一定的性能开销和使用限制。在实际编程中,我们需要根据具体的需求和场景,权衡利弊,充分发挥它的优势,避免陷入潜在的陷阱。希望通过本文的介绍,你能对。原创 2025-05-08 11:54:49 · 1271 阅读 · 0 评论 -
c++ 手写STL篇(一)用数组实现vector核心功能
在 C++ 标准模板库(STL)的众多组件中,vector无疑是最常用且功能强大的数据结构之一。它就像一个智能的动态数组,既能像普通数组一样高效地随机访问元素,又能根据数据量自动调整大小,解决了传统数组固定大小的局限性。那么,vector是如何实现这些强大功能的呢?答案就藏在其底层基于数组的实现方式中。今天,我们就一同深入探索,如何用数组来构建vector的核心功能。原创 2025-04-10 16:33:16 · 542 阅读 · 0 评论 -
c++ 手写STL篇(二) 用双向链表实现list核心功能
list底层使用双向链表实现的一个序列容器,所以他的插入删除效率高(O(1)时间复杂度),但是与vector不同的是其内部元素并不是再内存空间中连续存储,导致其访问速度O(n).List的双向链表是带头尾的,需要额外空间维护。原创 2025-04-10 22:53:16 · 504 阅读 · 0 评论 -
c++ 手写STL篇(三)实现hashtable
在c++中,hanshtable是一个重要的底层数据结构,无序容器(unordered_map \ unordered_set)底层都是hashtable实现的。原创 2025-04-13 13:55:33 · 659 阅读 · 0 评论 -
c++ 手写STL篇(四) 实现红黑树(RB-Tree)
在计算机科学的世界里,数据结构是基石,而红黑树作为一种高效的,在众多场景中发挥着重要作用。C++ STL 中的map和set其底层实现都是红黑树。原创 2025-04-29 17:44:16 · 1080 阅读 · 0 评论 -
c++ 手写内存池:实现三级缓冲结构内存池
一、内存池简介内存池,简单来说,就是一种内存管理技术。它在程序运行前预先分配一块较大的内存空间,当程序需要申请内存时,直接从这个内存池中获取,而不是每次都向操作系统申请;当程序释放内存时,也不是直接归还给操作系统,而是放回内存池,供后续使用。这种方式避免了频繁地向操作系统申请和释放内存带来的开销(用户态和内核态切换带来的性能损失),大大提高了内存分配和释放的效率。打个比方,内存池就像是一个仓库,程序需要的内存就是仓库里的货物。以往,每次只要。原创 2025-04-30 16:43:53 · 697 阅读 · 0 评论 -
缓存置换:用c++实现最不经常使用(LFU)算法
在探讨缓存置换算法时,我们曾详细解读过,它凭借 “最近最少使用” 的策略在缓存管理领域大放异彩。今天,让我们将目光聚焦于另一种重要的缓存置换算法 ——LFU(Least Frequently Used 最不经常使用),深入探究它的原理、实现方式、应用场景以及与 LRU 的差异。原创 2025-05-01 15:37:42 · 1178 阅读 · 0 评论 -
缓存置换:用c++实现最近最少使用(LRU)算法
在计算机的世界里,缓存就像一个“快速仓库”,它存储着我们频繁访问的数据,大大提升了数据的读取速度。但这个 “仓库” 空间有限,当它被装满时,就得决定舍弃一些数据,为新数据腾出位置,这个决策过程就由缓存置换算法来掌控。今天,就让我们探索常见的缓存置换算法中的最近最少使用算法(LRU),并使用c++实现它。原创 2025-04-30 23:53:58 · 1795 阅读 · 0 评论 -
C++ 与 Lua 联合编程
在软件开发的广阔天地里,不同编程语言各有所长。C++ 以其卓越的性能、强大的功能和对硬件的直接操控能力,在系统开发、游戏引擎、服务器等底层领域占据重要地位,但c++编写的程序需要编译,这往往是一个耗时操作,特别对于大型程序而言编译可能耗费几十分钟;而Lua 则凭借其轻量级、可嵌入性和灵活的脚本特性,在游戏脚本、配置管理等方面大放异彩。当 C++ 与 Lua 携手合作,它们能够优势互补,创造出更强大、更灵活的应用程序。本文将带你逐步深入了解 C++ 和 Lua 联合编程,从基础概念到实际应用,领略这种编程方式原创 2025-05-02 17:59:25 · 2170 阅读 · 4 评论 -
c++实现异步线程池并详细分析线程池析构流程
多线程编程是提高程序性能和响应能力的关键技术之一,异步线程池作为多线程编程的一种有效实现方式,能够管理和复用线程资源,避免频繁创建和销毁线程带来的开销。在本文中,我们将深入探讨如何实现一个异步线程池。原创 2025-06-05 03:03:57 · 1272 阅读 · 0 评论