自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 C++四种类型转换

C++提供了四种类型转换运算符:static_cast、dynamic_cast、const_cast和reinterpret_cast。static_cast用于编译时类型转换,支持基本类型转换、类层次上下行转换等,其中上行转换安全但下行转换可能不安全;dynamic_cast依赖运行时类型检查,主要用于多态类的安全下行转换;const_cast专门用于修改常量性;而reinterpret_cast则进行底层强制转换,风险最高。每种转换各有适用场景,使用时需注意安全性。

2025-09-11 14:44:49 410

原创 STL 容器

STL(标准模板库)是C++的核心组件,包含容器、迭代器和算法三大模块。容器分为序列式、关联式和容器适配器三类。序列式容器(如vector、list、deque、array、forward_list)按元素插入顺序线性排列,支持随机或顺序访问。关联式容器分为有序(基于红黑树,如set、map、multiset、multimap)和无序(基于哈希表,如unordered_set、unordered_map、unordered_multiset)两类,前者按键排序,后者通过哈希函数快速访问。有序关联容器保证元素

2025-08-17 22:52:50 780

原创 线程池分析与设计

本文介绍了C++11中线程池的实现关键组件,重点讲解了std::packaged_task和std::future的使用方法。std::packaged_task用于封装可调用对象为异步任务,与std::future关联后可获取执行结果。文章详细展示了线程池的任务提交机制,包括带返回值和不带返回值的任务封装方式,以及工作线程从任务队列中取出并执行任务的过程。通过条件变量和互斥锁保证线程安全,实现了高效的线程池任务调度机制。

2025-08-08 21:35:46 857

原创 排序算法分析与实现

本文介绍了常见的排序算法,分为内部排序(冒泡、选择、插入、快速、堆、希尔排序)和外部排序(归并、桶、基数排序)。重点解析了冒泡排序、选择排序、插入排序、希尔排序和快速排序的原理、实现及复杂度分析。冒泡排序通过相邻元素比较交换实现简单排序;选择排序通过选择极值元素进行排序;插入排序在部分有序序列基础上插入元素;希尔排序是插入排序的改进,采用分组策略;快速排序则基于分治思想,通过基准元素划分序列。这些算法的时间复杂度多为O(n²)(快速排序最优为O(nlogn)),空间复杂度均为O(1),适用于不同场景的数据排

2025-08-06 12:17:49 983

原创 进程原理的简要分析

本文系统介绍了进程的基本概念、组成、状态切换、调度算法、上下文切换及通信方式。进程是操作系统资源分配的最小单元,由PCB唯一标识,包含进程标识、状态、CPU上下文等信息。进程状态包括创建态、就绪态、运行态、阻塞态和终止态,通过调度算法(如FCFS、SJF等)实现状态切换。进程间通信方式包括管道(匿名/命名)、消息队列、共享内存、信号量、套接字和内存映射文件,各有优缺点及适用场景。共享内存效率最高,但需同步机制;信号量用于进程同步;套接字支持跨网络通信。理解这些机制有助于优化程序性能和资源管理。

2025-08-03 23:19:07 1026

原创 std::string

本文介绍了SSO(Small String Optimization)优化技术,用于提升短字符串的性能。传统字符串频繁分配堆内存导致效率低下,SSO通过区分短字符串(栈存储)和长字符串(堆存储)来解决这一问题。采用联合体(union)和标志位判断字符串类型,不同编译器(GCC/Clang/MSVC)的短字符串阈值略有差异。文章详细分析了SSO的实现结构,包括短字符串(ShortString)和长字符串(LongString)的存储方式,并给出了SSOString类的关键实现:构造函数根据长度选择存储方式,析

2025-08-01 01:00:00 572

原创 vector原理与相关操作

本文介绍了C++标准库中std::vector的实现原理及其核心操作。作为动态数组容器,std::vector存储在连续内存空间并支持自动扩容。重点分析了元素操作函数(push_back/emplace_back/insert/erase等)的底层实现,特别是_M_realloc_insert函数的扩容逻辑,包括新容量计算、内存分配、元素移动构造等关键步骤。文章还探讨了性能优化方案,如使用reserve()预分配内存以减少重分配开销,以及resize()调整空间大小的实现细节,为理解和使用vector提供了

2025-07-31 12:27:54 855

原创 STL前置知识

本文介绍了内存分配器在STL中的核心作用与实现原理,主要包括: 内存分配器是容器与内存管理的抽象层,主要负责内存分配/释放、对象构造/析构。标准库实现通常优于自定义版本。 核心实现机制: 分配/释放:通过全局operator new/delete操作原始内存 对象构造:使用placement new和可变参数模板 对象析构:显式调用析构函数 辅助功能: 提供地址获取、最大空间查询等接口 通过rebind支持类型转换 比较运算符确保内存操作安全 相关技术: type_traits:编译期类型信息查询与转换 S

2025-07-31 01:31:32 977

原创 shared_ptr与weak_ptr

本文主要分析了C++中的shared_ptr和weak_ptr智能指针的工作原理及实现机制。shared_ptr采用引用计数管理对象生命周期,支持自定义删除器,但需注意避免循环引用和多指针管理同一裸指针等问题。weak_ptr作为shared_ptr的观察者,不参与引用计数,主要用于解决循环引用和观察对象状态。文章深入剖析了控制块基类sp_count_base的架构,包括引用计数管理、对象释放逻辑等核心机制,并介绍了自定义删除器sp_count_deleter的实现方式。通过源码分析,揭示了智能指针如何通过

2025-07-27 08:00:00 818

原创 # 深入理解C++智能指针之 unique_ptr

本文分析了C++11引入的智能指针特性,重点介绍了其核心原理RAII(资源获取即初始化)和所有权模型。文章详细解析了智能指针的分类(侵入式与非侵入式)及其代表类型,包括unique_ptr、shared_ptr等。其中对unique_ptr进行了深入探讨,阐述了其独占所有权、轻量化等特性,并通过代码示例展示了基本用法、资源所有权转移、作为函数参数等场景。最后从源码层面剖析了unique_ptr的实现原理,包括默认删除器设计、空指针构造等关键机制。智能指针通过自动管理内存生命周期,有效解决了手动内存管理中的常

2025-07-26 17:46:54 1975

原创 mmap (Memory-Mapped File)原理分析

mmap(内存映射)是一种高效的文件读写方法,通过将文件直接映射到进程地址空间,允许进程通过指针操作文件数据,避免了传统read/write的系统调用和两次数据拷贝。相比传统I/O,mmap减少了CPU参与和用户态/内核态切换开销,特别适合处理大文件或频繁读写场景。其工作原理基于虚拟内存管理,首次访问时触发缺页中断加载数据,修改后自动标记脏页并异步回写磁盘。mmap还支持进程间共享内存通信,但需注意同步问题。传统I/O兼容性好但效率较低,而mmap在性能敏感场景优势明显,是大文件处理和进程通信的理想选择。

2025-07-22 20:42:59 821

原创 虚函数与虚继承

摘要:本文详细介绍了C++中的虚函数和虚继承机制。虚函数通过virtual关键字声明,实现运行时多态,核心原理是虚函数表(vtable)和虚表指针(vptr)。虚继承解决多重继承中的菱形继承问题,确保基类在派生类中只有一份实例,通过虚基类表(vbtable)实现。文章还分析了内存布局、构造函数/析构函数的虚函数特性限制、对象切片现象等内容,并提供了代码示例说明。这些机制是C++实现多态和解决复杂继承关系的重要特性。

2025-07-21 10:57:04 678

原创 C++11新特性-lambda

本文对比分析了C++11中的std::bind()与lambda表达式。std::bind实现参数绑定和延迟执行,支持函数、成员函数及函数对象的绑定,但语法复杂且性能较低。lambda表达式则更简洁高效,支持多种变量捕获方式,从C++11到C++20持续增强功能。两者都能实现参数绑定和延迟调用,但lambda更符合现代C++编程风格,具有更好的可读性和性能。建议在大多数场景下优先使用lambda表达式,仅在需要接口适配等特定场景下考虑std::bind。

2025-07-20 20:00:13 1963

原创 Redis数据表现形式与底层数据结构

Redis提供了丰富的数据表现形式和高效的底层数据结构。核心数据类型包括:String(字符串/计数器/二进制数据)、Hash(对象存储)、Set(唯一集合)、Sorted Set(有序集合)、List(队列/栈)和Bitmap(位运算集合)。底层实现上,Redis采用简单动态字符串(SDS)优化字符串操作,通过空间预分配和惰性释放减少内存分配次数。SDS支持二进制安全、常数时间获取长度,并兼容C字符串函数。这些精心设计的数据结构使Redis能够高效处理各种场景,如缓存、计数、排行榜和消息队列等。

2025-07-17 20:21:43 1887

原创 万能引用与完美转发

摘要:本文介绍了C++中的万能引用和完美转发机制。万能引用是一种特殊引用类型,通过模板类型推导和引用折叠规则,既能绑定左值也能绑定右值。完美转发则利用std::forward保持参数的原始属性进行传递。文章详细解析了两者的底层原理,包括引用折叠规则和std::forward的实现机制,并通过示例代码展示其应用场景。最后强调了两者的区别与联系,指出万能引用多与完美转发配合使用,并提醒避免在完美转发中使用std::move的错误做法。文章旨在帮助读者深入理解C++中这两个重要的移动和转发机制。

2025-07-14 21:58:13 579

原创 基于duration封装space类

myspace::space是一个类型安全的存储空间表示模板类,通过模板参数化设计支持不同存储单位(字节、KB、MB等)的计算与转换。其核心原理包括: 使用Rep_表示数值类型,Period_(基于ratio)定义单位换算比例 通过space_cast实现单位转换,自动处理整数/浮点精度问题 采用编译期类型检查确保单位一致性,避免不同单位直接运算的错误 提供统一类型机制(unify_space_type)处理跨单位运算 该设计类似std::chrono::duration的时间处理机制,但应用于存储空间领域

2025-07-13 23:05:26 835

原创 C++ 时间库实现:duration 类的原理与复现解析

C++时间库duration类解析与实现 本文深入分析了C++11标准库中duration类的实现原理,并完整复现了这一时间间隔表示工具。duration类通过模板参数Rep_(数值类型)和Period_(时间单位)实现灵活的时间处理,支持从纳秒到天等多种时间单位。文章详细介绍了: 核心实现原理:包括模板参数设计、单位转换的duration_cast机制以及数值存储方式 运算符重载:一元/二元运算符、算术操作等实现细节 精度处理:使用higher_precision_duration选择更高精度类型,std

2025-07-12 15:24:33 1118

原创 std::ratio原理分析与复现

std::chrono中std::ratio库的原理分析与复现

2025-07-12 12:17:10 644

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除