- 博客(41)
- 收藏
- 关注
原创 C++17文件系统
本文介绍了C++17标准库中的文件系统路径操作类std::filesystem::path。主要内容包括: 路径拼接操作:append()、operator/=和operator+=三种方式的区别,展示自动添加分隔符的特点。 路径分解功能:详细说明root_name()、root_directory()等7个方法,用于拆分路径各组成部分。 路径查询功能:介绍empty()、is_absolute()等8个布尔判断方法,检测路径属性。 通过表格对比和代码示例,清晰展示了std::filesystem::pat
2025-10-12 14:08:31
713
11
原创 C++11并发支持库
/ 1. 原始互斥量/* 2. lock_guard:简单粗暴 */++g_count;} // 自动解锁/* 3. unique_lock:高级玩法 */// 延迟加锁ul.lock();// 手动加锁// 手动解锁/* 4. try_lock_for 示例(配合 timed_mutex) */// 支持超时的互斥量} else {int main()t1.join();t2.join();return 0;接口一句话作用默认内存序一行代码示例。
2025-10-08 16:41:39
739
14
原创 项目---网络通信组件JsonRpc
本项目是一个基于muduo网络库开发的C++17高性能RPC分布式框架,支持服务注册发现、异步调用、发布订阅和负载均衡等功能。项目采用分层架构设计,包含抽象层、具象层和业务层三大模块,使用JsonCpp进行序列化。核心功能包括RPC远程调用、服务注册中心、发布订阅系统和消息分发机制,适用于构建高并发分布式系统。技术栈包括C++17、muduo网络库、JsonCpp序列化和Linux平台,通过Makefile构建。项目实现了完整的RPC调用流程,包括消息序列化、网络通信和服务路由等功能。
2025-10-06 15:00:34
1177
11
原创 Linux : 动静态库制作、ELF格式
本文介绍了Linux系统中的基础IO与文件系统相关知识,重点讲解了动态库和静态库的制作与链接方法,以及ELF文件格式的组成与转换过程。 主要内容包括: 静态库(.a)和动态库(.so)的制作与链接方法,包括路径指定选项-I、-L、-l的使用 动态库链接问题的四种解决方案 ELF文件格式的四种类型及其组成结构,包括节头表和程序头表的作用 ELF文件如何通过合并Section形成Segment来提高内存效率 常用的ELF分析命令如size、readelf等 程序从ELF到可执行文件的转换过程,涉及虚拟地址空间的
2025-10-05 21:56:41
995
原创 c++:SLT容器之set、map详解
本文主要介绍了C++ STL中的关联式容器set和map。首先对比了序列式容器和关联式容器的区别,指出关联式容器具有非线性结构,元素之间存在紧密联系。然后详细分析了set容器的特性与常用操作,包括构造函数、插入、查找、删除等函数,并比较了set与multiset的区别。文章接着介绍了map容器,说明其与set的主要区别在于采用key-value结构,并介绍了pair类型的概念。最后,文章简要提及了map的构造函数和初始化方式。整体内容涵盖了这两种关联式容器的基本特性和使用方法,为C++开发者提供了实用的参考
2025-09-23 20:32:56
1008
原创 Linux:进程信号
在对信号进行处理时,系统中有一个函数指针数组,其中数组下标对应的就是信号的值,因此我们可以传入不同的函数来改变对应信号的处理动作。std::cout << "获得了一个信号:" << sig << std:: endl;i++)i < 32;continue;raise(i);return 0;
2025-05-09 10:00:15
926
1
原创 Linux:进程间通信
共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,进程不再通过执行进入内核的系统调用来传递彼此的数据。设置一个共享内存结构体,接着可以通过输出型参数的形式获得共享内存的属性。即可,下面我们使用命名管道的原理来进行一个客户端和服务器通信构建。是一个输入型参数,通过调用函数可以得到匿名管道的文件描述符。
2025-04-27 23:34:39
780
原创 Linux:基础IO && 文件系统
本文系统介绍了Linux基础IO与文件系统的核心概念。主要内容包括:1)系统IO接口open、write、read等系统调用及其底层实现;2)文件描述符机制与标准输入/输出/错误流的关联;3)dup系统调用实现重定向的原理;4)文件缓冲区的双层次结构(用户级与内核级)及模拟实现;5)虚拟文件系统"一切皆文件"的设计思想;6)磁盘物理结构(CHS寻址)与逻辑结构(LBA寻址)的转换;7)文件系统组织架构(Block Group、inode Table等核心组件);8)硬链接与软连接的区别与
2025-04-27 15:20:24
1197
原创 Linux:进程控制详解
可变参数最后一个一定要传入NULL表示传递完成, 程序替换时配合fork使用,可以使得程序替换后面的代码不会影响结果。只用带文件名,bash会在指定的PATH中去寻找这个文件。提供一个命令行参数表,实际上就是一个字符指针数组。传入环境变量,子进程用传入的这个环境变量将原来浅拷贝的环境变量替换掉。
2025-01-18 10:57:49
892
1
原创 Linux:进程概念详解
磁盘中的程序在被执行时,首先要在物理内存空间中开辟代码和数据所需的地址空间,再去虚拟地址空间的相应位置开辟空间,接着我们再去填充页表,虚拟内存和内存间就建立了一一映射的关系。我们在创建变量后,会在内存中存在一个真实的物理空间,同时虚拟地址空间会记录下这个地址空间的地址,我们在访问变量时只需要。我们发现子进程和父进程的地址是一样的,但是相同地址的值却不相同,进一步证明了当前地址是虚拟地址。我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但。
2025-01-18 10:35:40
1201
原创 Linux : Linux环境开发工具vim / gcc / makefile / gdb / git的使用
等。通常情况下,条件编译的作用是是将应用划分成不同的版本。
2025-01-08 18:33:22
1821
2
原创 Linux :用户权限详解
Linux权限详解一、认识权限二、用户间切换三、指令提权四、修改属性(一)修改拥有者 / 所属组(二)修改r/w/x权限1、非八进制2、八进制(三)缺省权限和权限掩码五、粘滞位一、认识权限权限就是你能不能做一件事情,在了解linux的权限之前,我们要先了解Linux中的人和事物。人 = 真实的人 + 身份角色何为真实的人呢,它指的是linux下的各个用户以及超级用户root,而在一个文件中身份角色分为三类,一个人的身份匹配规则是,从前向后只匹配一次。身份角色包括拥有者,所属组,
2025-01-07 15:44:15
706
原创 数据结构:二叉搜索树详解
这个是之前用C语言实现的二叉排序树的插入,当时觉得设计的已经十分巧妙,现在学了C++,使用了更加可维护,高效率的方式实现,也就是下面的非递归。假如我们使用数组进行储存和搜索数据,二分查找也可以实现 O(logN) 级别的查找效率,却有不足。仍然是二叉搜索树,只是此时除了键值以外还多了一个绑定的值,这个值可以是任何类型。二叉排序树的中序遍历是按照升序排列的,所以⼜称⼆叉排序树,在。key/value的搜索场景实现的二叉树搜索树支持修改。加以修饰,在遍历的时候,需要使用。,完美的避开了上诉的缺点。
2025-01-06 18:23:10
984
原创 C++ : 面向对象三大特性--多态
在基类中,使用virtual关键字声明的成员函数称为虚函数。虚函数的重写/覆盖:派生类中有⼀个跟基类完全相同的虚函数(即返回值类型、函数名字、参数列表完全相同),称派⽣类的虚函数重写了基类的虚函数。public:cout << "买票-全价" << endl;public:cout << "买票-打折" << endl;注意:在重写基类虚函数时,派⽣类的虚函数在不加virtual关键字时,虽然也可以构成重写,但是该种写法不是很规范,得到的结果就是父类的参数部分加上派生类的函数体。
2025-01-06 18:20:20
988
原创 c++:泛型编程之模板详解
模板就是给编译器一个模子,让编译器根据不同的类型利用该模子来生成代码typename是用来定义模板参数关键字,也可以使用class类模板在实例化时,我们在传入变量的类型时就确定了其中的类型,成员属性已经确定了,但是成员函数是按需实例化。++_size;
2024-11-26 17:35:21
1284
22
原创 c++:面向对象三大特性--继承
继承的三大特性摘要 继承是面向对象编程中实现代码复用的重要机制,允许派生类在保留基类特性的基础上进行扩展。 继承概念 派生类继承基类成员,通过public、protected、private三种方式控制访问权限。 struct默认公有继承,class默认私有继承。 基类与派生类转换 派生类对象可赋值给基类指针/引用(切片),但基类对象不能直接赋值给派生类。 派生类中基类私有成员仍占空间,但不可访问。 作用域与隐藏 同名成员或函数在派生类中会隐藏基类成员,需通过基类::成员显式访问。 构造与析构 派生类构造函
2024-11-26 14:21:46
2155
57
原创 C++ : STL容器之list剖析
摘要: 本文深入剖析了STL中list容器的关键接口与实现原理。首先对比了push_back与emplace_back的差异,指出emplace_back在直接构造场景下的性能优势。其次分析了list单独实现sort函数的原因,源于其只支持双向迭代器而非随机迭代器。文章还详细讲解了splice、unique和merge等独特接口的用法。最后探讨了list的模拟实现,包括结点类设计、迭代器封装与模板参数优化技巧,特别解释了->运算符重载的特殊处理方式。通过代码示例与图示,全面展示了list容器的内部机制
2024-10-21 18:35:57
2193
114
原创 C++ : STL容器之vector剖析
本文分析了STL中vector容器的实现,重点介绍了构造函数、赋值操作及关键接口的实现细节。主要内容包括: 构造函数实现:默认构造、拷贝构造(深拷贝和复用两种方式)、相同值构造、迭代器构造和initializer_list构造。 赋值重载的现代写法:通过值传参调用拷贝构造,再交换对象内容,利用析构自动释放原空间。 关键接口实现: reserve扩容时避免浅拷贝问题 resize调整大小 erase删除元素并返回下一个迭代器 insert插入元素时处理迭代器失效 实现技巧:使用三个指针(_start、_fin
2024-10-13 14:29:18
2192
107
原创 C++ : STL容器之string剖析
本文主要剖析了STL容器string的核心功能实现,包括迭代器、容量操作和元素访问修改三大部分。迭代器部分详细介绍了begin、end、反向迭代器的实现原理及使用方式;容量相关函数解析了size、capacity、resize、reserve等接口的功能特性;元素访问和修改章节重点讲解了[]操作符重载、at函数以及front/back方法的实现。文章还通过代码示例展示了string的常见操作,如+=运算符重载、append、push_back等字符串追加方式。整体内容深入浅出地讲解了string容器的底层实
2024-10-07 14:10:02
1813
88
原创 C++:动态内存分配(new、delete 相比 malloc、free的优势)与运算符重载
本文介绍了C++中动态内存分配与运算符重载的核心知识点。在动态内存分配部分,详细讲解了new/delete与malloc/free的区别,包括new会调用构造函数、delete调用析构函数的特性,并分析了operator new和operator delete的底层实现原理。运算符重载部分以日期类为例,重点讲解了输入输出流重载的特殊性(必须作为全局函数实现),以及比较运算符和算术运算符的重载实现方法。文章还涉及了定位new的应用场景和注意事项,通过具体代码示例展示了如何将内存分配与对象构造分离。全文通过理论
2024-09-19 17:07:18
2525
127
原创 编程基础:函数栈帧的创建和销毁
函数栈帧是指在程序执行过程中,每个被调用的函数会在内存中分配一块特定的存储区域,用于存储函数的局部变量、函数参数、返回地址以及其他与函数执行相关的信息
2024-09-17 16:14:12
1612
101
原创 C++:类和对象全解
本文全面介绍了C++中类和对象的核心概念与使用方式。文章首先从类的定义入手,详细讲解了成员变量(属性)和成员函数(方法)的声明与封装特性,强调了访问修饰符private的作用。然后通过实例化对象的两种方式(普通构造函数和初始化列表),深入分析了对象创建过程的内存分配机制。 在类的补充部分,作者对比了class与struct的默认权限差异,解释了类域的概念及作用域操作符的使用方法,并通过代码示例演示了类大小的计算规则和空类的大小特性。关于this指针,文章剖析了其底层实现原理和在成员函数中的隐式调用机制。 最
2024-09-15 08:39:59
2186
98
原创 C++:入门篇(补充C语言中的不足)
本文介绍了C++入门基础语法,包括命名空间、缺省参数、函数重载、引用、inline关键字和nullptr等核心概念。命名空间通过域隔离解决命名冲突;缺省参数为函数参数提供默认值;函数重载允许同名函数存在不同参数;引用作为变量别名提升效率;inline关键字优化短函数性能;nullptr解决C语言NULL的歧义问题。这些特性扩展了C语言功能,为后续C++学习奠定基础。
2024-09-09 19:16:54
2161
93
原创 C语言:文件处理
本文系统介绍了C语言文件处理的相关知识,主要包括以下内容:1. 文件分类:从信息组织方式分为文本文件和二进制文件,从功能分为程序文件和数据文件;2. 文件操作:详细说明文件指针(FILE结构体)、文件打开(fopen)和关闭(fclose)的实现方式,并列出12种文件打开模式;3. 文件读写函数:重点讲解fgetc/fputc、fgets/fputs、fscanf/fprintf、fread/fwrite等13个常用文件操作函数的用法、参数及返回值;4. 文件定位:介绍fseek、ftell和rewind等
2024-08-07 23:54:19
2624
67
原创 C语言:动态内存管理
本文介绍了C语言中动态内存管理的关键内容。首先阐述了动态分配内存的必要性,即可以在程序运行时灵活调整内存空间。随后详细讲解了malloc、calloc、realloc和free四个核心函数的用法及注意事项。文章还分析了常见的内存管理错误,如空指针解引用、越界访问、部分释放和内存泄漏等问题。特别介绍了柔性数组的特点和优势,并通过两个典型题目演示了内存管理的常见陷阱。最后强调正确释放内存和避免野指针的重要性,提供了动态内存管理的实用指导。
2024-08-02 09:00:00
1874
33
原创 C语言:自定义类型进阶(结构体、联合体、枚举)
本文详细介绍了C语言中的三种自定义类型:结构体、联合体和枚举。重点分析了结构体的内存对齐规则及其性能优势,解释了位段的内存分配方式及其平台依赖性,并通过实例展示了枚举和联合体的实际应用场景。结构体通过空间换时间提高访问效率,联合体通过共享内存节省空间,枚举则增强了代码可读性。文章还探讨了默认对齐数的设置方法,并总结了这些自定义类型在编程中的重要性。
2024-08-01 09:35:14
1742
35
原创 C语言:数据在内存中的存储
本文介绍了数据在内存中的存储方式,重点分析了大小端字节序的区别及判断方法,并通过代码示例进行了验证。文章详细讲解了整型数据的原码、反码和补码表示形式,以及浮点数在内存中的存储结构。此外,还通过典型案例剖析了字符类型的取值范围和内存存储特性。最后,作者提供了关于数据存储的实用代码示例和总结。全文内容紧凑实用,适合对计算机内存存储机制感兴趣的读者参考学习。
2024-07-29 20:43:26
1484
38
原创 C语言:操作符详解
本文介绍了C语言中常见的操作符类型及其使用方法,包括算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符和逗号表达式。重点讲解了移位操作符的运算规则和位操作符的巧妙应用,如交换变量值和统计二进制中1的个数。同时提供了操作符优先级表,帮助读者正确理解和使用各种操作符。文章内容实用,适合C语言初学者掌握操作符的基础知识和应用技巧。
2024-07-26 14:25:45
1308
23
原创 C语言:字符串函数、内存函数剖析
本文详细剖析了C语言中常用的字符串函数和内存操作函数。字符串函数部分包括求长度(strlen)、复制(strcpy)、追加(strcat)、比较(strcmp)等基础操作,以及长度受限版本(strncpy等)和查找函数(strstr)。内存操作函数部分重点介绍了内存拷贝(memcpy/memmove)、比较(memcmp)和设置(memset)函数。文章不仅提供了库函数的使用方法和示例,还给出了关键函数的自定义实现代码,如strlen的三种实现方式、strcpy的指针操作等。这些函数是C语言底层编程的基础工
2024-07-25 15:49:54
1378
20
原创 数据结构:平衡二叉树之红黑树插入删除
红黑树是一种自平衡二叉查找树,它通过特定的性质和操作来维持树的平衡,确保在最坏情况下的基本动态集合操作(如查找、插入、删除)的时间复杂度保持在 O(log n)。
2024-07-14 14:29:31
1264
19
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅