
C++
文章平均质量分 67
bkspiderx
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
TCP与UDP协议的Socket编程详解
在网络通信中,Socket是实现不同主机间进程通信的核心接口。TCP和UDP作为传输层的两大核心协议,其Socket编程方式因协议特性差异而有所不同。本文将详细介绍两种协议的Socket编程流程、实现示例及核心差异。原创 2025-08-23 09:03:30 · 439 阅读 · 0 评论 -
C++智能指针详解:用法与实践指南
当两个或多个shared_ptr互相指向对方,形成一个“闭环”时,就会产生循环引用。此时,每个指针的引用计数都无法降到0,导致它们管理的对象永远不会被释放,造成内存泄漏。智能指针是C++内存管理的重大进步,它们通过封装原始指针,实现了内存的自动释放,大幅减少了内存泄漏的风险。理解unique_ptr的独占性、shared_ptr的共享机制,以及weak_ptr在打破循环引用中的作用,是掌握现代C++编程的关键。原创 2025-08-23 09:00:36 · 555 阅读 · 0 评论 -
C++03线程池:基于POSIX线程库的实现
本文介绍了基于POSIX线程库(pthread)的C++03线程池实现。线程池通过预先创建工作线程和任务队列,减少了频繁创建线程的开销,提高了并发任务处理效率。核心组件包括工作线程、任务队列和同步机制。实现部分展示了线程池类的设计:使用模板类封装任务,支持有/无返回值的任务提交;通过互斥锁和条件变量实现线程安全;提供线程数量动态调整功能。该实现避免了C++03缺乏原生线程支持的问题,为并发编程提供了高效解决方案。原创 2025-08-22 09:11:01 · 889 阅读 · 0 评论 -
C++线程池(Thread Pool)
本文介绍了一个高效线程池的实现方案。该线程池具有以下核心功能:1)自动管理线程生命周期,避免频繁创建销毁;2)支持任务提交并获取结果;3)提供线程数量动态调整能力;4)包含任务队列监控接口。实现上采用任务队列、条件变量等同步机制,支持并行任务处理,同时通过原子变量确保线程调整的安全性。该方案可有效降低系统开销,提高并发任务处理效率,适用于需要处理大量短周期任务的场景。原创 2025-08-22 09:10:16 · 458 阅读 · 0 评论 -
C++多尺寸内存池:设计与实现
本文介绍了一种高效的多尺寸内存池设计与实现方案。该内存池通过预分配管理技术,针对不同内存需求提供优化解决方案:为小内存(4-2048字节)设置固定尺寸子池,大内存则采用单独管理器。核心优势包括减少系统调用开销、降低内存碎片、提升分配效率及稳定性能表现。实现包含线程安全的FixedSizeSubPool和LargeBlockManager类,支持自动匹配最优内存块、校验保护及状态监控。代码结构清晰,包含完整头文件和实现文件,适合高性能C++应用场景。原创 2025-08-21 09:20:13 · 685 阅读 · 0 评论 -
C++的内存分配
摘要: C++内存分配分为栈、堆、全局/静态区、常量区和代码区,各自管理不同生命周期的数据。栈内存自动分配/释放,高效但空间有限;堆内存需手动管理(new/delete或malloc/free),灵活但易引发泄漏、野指针等问题。现代C++通过智能指针(unique_ptr、shared_ptr)实现自动内存回收,内存池则可优化频繁分配场景。开发时应优先使用栈和智能指针,避免手动管理错误。原创 2025-08-21 09:19:08 · 785 阅读 · 0 评论 -
C++数据结构与算法高频编程题及实现
本文总结了C++中常见数据结构与算法的高频编程题及实现方法,主要包括: 数组操作:二分查找(基础及变种)、滑动窗口算法,时间复杂度O(log n)和O(n); 链表操作:反转链表、检测环、合并有序链表、找中间节点等,使用快慢指针等技巧; 栈与队列:栈实现队列、括号匹配验证等; 树结构:二叉树遍历(递归和非递归实现)。 每种数据结构都给出了核心操作的标准实现代码,并分析了时间复杂度和适用场景。这些算法涵盖了面试和实际开发中的高频问题,是C++程序员必备的基础知识。原创 2025-08-20 09:07:20 · 810 阅读 · 0 评论 -
串口通信操作详解及实现
本文详细介绍了串口通信的基础知识和Linux系统下的实现方法。串口作为硬件通信接口,采用UART协议进行异步数据传输,需匹配波特率等参数。文章提供了完整的C语言实现代码,包括串口打开/配置、数据读写和关闭操作。代码解析部分说明了关键函数的功能和实现细节,最后给出了编译和使用方法。该程序支持通过命令行指定设备和波特率,实现简单的串口交互通信功能。原创 2025-08-19 09:17:59 · 920 阅读 · 0 评论 -
摄像机PTZ控制:Pelco-D、Pelco-P与VISCA协议详解
本文详细介绍了三种主流的PTZ摄像机控制协议:Pelco-D、Pelco-P和VISCA。Pelco-D是安防监控领域最常用的简单可靠协议;Pelco-P作为其增强版支持更多高级功能;VISCA则是索尼开发的专有协议,适用于视频会议摄像机。文章通过技术对比表清晰呈现了三者的差异,并提供了详细的帧结构说明和核心控制指令。此外,还包含实用的C语言实现代码片段,帮助开发者快速掌握协议应用。这三种协议分别适用于不同场景,理解其特性能为摄像机控制系统的开发提供重要参考。原创 2025-08-19 09:16:31 · 1004 阅读 · 0 评论 -
C++ 是技术面试中的高频考察测点(基础知识)
本文系统梳理了C++面试中的核心知识点,涵盖语法基础、面向对象、内存管理和STL等关键领域。重点解析了const、指针与引用、static等关键字的用法,详细对比了函数重载与重写、new/delete与malloc/free等概念的差异。面向对象部分深入探讨了多态实现、虚函数机制和继承问题解决方案。内存管理章节强调了智能指针的正确使用和内存泄漏防范。STL部分对比了不同容器的底层实现与适用场景。最后介绍了C++11的移动语义等新特性,为面试者提供全面的知识体系梳理和技术要点提炼。原创 2025-08-18 11:18:23 · 974 阅读 · 0 评论 -
C++链表操作及常见面试题解析
本文介绍了C++中链表的基本操作和常见面试题。首先讲解了链表节点定义和创建、打印、插入、删除、反转等基础操作,并给出了完整代码示例。然后重点解析了链表相关的常见面试题,包括环检测、双指针技巧(寻找中间节点和倒数第k个节点)等。文章通过清晰的代码实现,帮助读者掌握链表的核心操作和解题思路,为面试和实际编程提供实用参考。原创 2025-08-18 11:17:47 · 462 阅读 · 0 评论 -
线程安全的自定义内存分配器(my_malloc 与 my_free)实现
摘要 本文实现了一个基于标准库malloc/free的线程安全内存分配器,保留了自定义分配器的核心功能。主要特点包括:1) 底层使用标准库进行实际内存管理,简化系统交互;2) 维护双向链表结构以跟踪空闲块,实现内存复用和碎片合并;3) 通过互斥锁保证多线程安全;4) 支持8字节内存对齐。关键功能包括:my_malloc函数优先复用空闲块,不足时调用malloc;my_free函数释放内存到空闲链表并进行相邻块合并。该实现既保持了自定义分配器的控制能力,又降低了直接操作系统内存的复杂性。原创 2025-08-15 09:17:51 · 737 阅读 · 0 评论 -
C++ 内存分配跟踪与类对象内存管理方案
本文介绍了一种C++内存分配跟踪与类对象内存管理方案,通过重写全局new/delete运算符实现内存泄漏检测。方案采用单例模式的MemoryTracker类,使用哈希表记录所有动态内存分配信息(地址、大小、文件、行号),并通过互斥锁保证线程安全。重载的运算符在分配时调用malloc并记录,释放时验证指针有效性并移除记录。程序退出时自动检查未释放内存,输出详细泄漏信息。该方案支持类对象的内存跟踪,通过分离内存分配与对象构造机制,确保对类实例的new/delete操作也能被准确记录。测试示例验证了基础类对象和继原创 2025-08-15 09:15:50 · 664 阅读 · 0 评论 -
基于标准库malloc/free的内存泄漏检测方案及宏替换原理
本文介绍了一种基于标准库的内存泄漏检测方案。该方案通过封装malloc/free函数,记录内存分配信息(地址、大小、位置),在程序退出时自动生成泄漏报告。核心实现包括:1)使用宏替换将标准函数映射到跟踪版本;2)通过链表记录所有分配的内存块;3)采用线程安全机制和递归调用防护。方案特别解决了宏替换导致的递归调用问题,通过#undef临时取消宏定义来调用标准库函数。该方案无需修改业务代码,兼容性强,适用于所有C语言环境。原创 2025-08-15 09:14:59 · 683 阅读 · 0 评论 -
QT中ARGB32转ARGB4444优化4K图像性能的实现方案(完整源码)
文章摘要 本文介绍了在QT项目中优化4K图像性能的解决方案。针对QImage::Format_ARGB32格式在4K分辨率下数据量过大导致性能不足的问题,提出通过修改QT源码实现ARGB32到ARGB4444格式转换的方案。该方案涉及修改QT 5.14.2版本中的两个核心文件:qlinuxfbscreen.h和qlinuxfbscreen.cpp,通过添加成员变量和实现格式转换逻辑,将每个像素从4字节压缩到2字节,从而显著减少数据量并提高编解码性能。文章提供了完整的修改代码实现,适用于基于Linux帧缓冲的原创 2025-08-14 16:04:22 · 597 阅读 · 0 评论 -
基于 libwebsockets 库实现的 WebSocket 服务器类
CCnWebSocket类摘要 CCnWebSocket是基于libwebsockets库实现的WebSocket服务器单例类,提供完整的WebSocket服务功能。主要特性包括: 采用单例模式设计,确保全局唯一实例 支持跨平台运行,内置连接管理功能 实现核心回调机制处理连接建立、数据收发和关闭事件 支持自定义协议扩展(如permessage-deflate压缩) 提供线程安全的主动关闭连接接口 类封装了WebSocket服务器的初始化、运行和销毁全流程,通过RunWebSocketServer()启动服务原创 2025-08-12 17:26:21 · 744 阅读 · 0 评论 -
简单的双向循环链表实现与使用指南
CnLinkedList是一个高效的双向循环链表实现,采用自包含节点设计,无需额外管理对象。其核心功能包括:1) 构造函数初始化自循环;2) O(1)复杂度的节点插入(InsertPrev/Next)和删除(RemovePrev/Next)操作;3) 节点自脱离方法(RemoveFromLinkedList);4) 链表长度计算(LinkedListSize)。通过继承CnLinkedList并添加数据字段,可创建带数据的链表节点。典型使用场景包括需要频繁插入/删除操作的场景,其内存紧凑且操作高效,通过维护原创 2025-08-12 17:23:04 · 396 阅读 · 0 评论 -
libwebsockets 服务端获取过代理的真实连接IP
摘要:本文介绍了在libwebsockets服务端获取经过代理(如Nginx)连接的客户端真实IP的方法。核心原理是通过解析代理服务器传递的X-Forwarded-For或X-Real-IP头字段获取真实IP,并提供了代理配置示例和libwebsockets实现代码。关键步骤包括代理服务器配置转发头、服务端解析头字段以及降级处理策略,同时强调了代理信任和版本兼容等注意事项,适用于反向代理等场景下的真实IP获取需求。原创 2025-08-11 17:07:07 · 573 阅读 · 0 评论 -
pb2json.hpp 文档:Protobuf 与 JSON 通用转换工具类
pb2json.hpp 是一个基于 C++ 实现的通用工具类,用于 Protocol Buffers 消息与 JSON 格式之间的双向转换。该工具类利用 Protobuf 的反射机制,支持任意 Protobuf 消息类型的转换,无需为特定消息类型编写专用代码。主要功能包括:Protobuf 消息与 Json::Value 对象互转、消息与 JSON 字符串互转,支持基础类型、枚举、嵌套消息和重复字段等常见数据类型转换,并提供枚举类型转换选项(字符串或数值形式)。实现上通过反射机制遍历消息字段,处理不同类型的原创 2025-08-11 16:55:41 · 719 阅读 · 0 评论 -
C++ 检测 IPv4 和 IPv6 地址合法性
本文介绍了两种在C++中验证IPv4和IPv6地址合法性的方法。推荐使用系统原生接口inet_pton函数,它能正确处理各种格式(包括IPv6压缩格式),实现简单可靠。文章提供了完整的代码示例和测试用例。对于无法使用系统接口的特殊场景,介绍了手动解析方案,但指出其实现复杂且易遗漏边缘情况。通过比较表总结了两种方法的优缺点,建议优先使用系统接口方法。原创 2025-08-11 16:47:02 · 294 阅读 · 0 评论 -
系统字节序(大小端)判断方法详解
本文详细介绍了系统字节序(大小端)的判断方法。首先解释了字节序的概念,区分了小端和大端两种存储模式及其应用场景。然后提供了三种具体判断方法:指针访问法(基础实现)、联合体法(推荐)和极简一行代码法,分析各自的优缺点和适用场景。所有方法的核心原理都是通过检查多字节变量的首字节值来判断存储顺序。文章建议大型项目优先使用联合体法,教学场景使用指针访问法,快速测试采用一行代码法。这些方法为跨平台数据处理提供了基础支持。原创 2025-08-11 11:11:55 · 517 阅读 · 0 评论 -
基于C++的验证码生成库及示例代码分享
整个验证码库仅由一个头文件CImg.h构成,该头文件涵盖了定义与实现部分,不过文件长度较大,已放置在附件中,有需要的朋友可以自行下载使用。原创 2024-12-26 15:41:23 · 545 阅读 · 0 评论 -
Socket编程中关于服务器端监听端口与新连接端口的深入剖析
在Socket编程领域,存在一个容易让初学者感到困惑的问题。尽管很多人在网络上进行了相关探讨,但不少解释要么不够清晰明了,要么太过肤浅,未能深入到问题的核心,这使得初学者在理解上存在诸多障碍。其中一个关键问题是:当Socket的服务端监听一个固定端口(例如8888),客户端前来连接此端口后,服务器会生成一个新的Socket与对应的客户端进行通讯。那么,这个新的Socket的发送和接收端口究竟是怎样的呢?是随机分配的,还是依然为8888?在此,明确地告诉读者,答案是8888。原创 2024-12-26 09:34:43 · 735 阅读 · 0 评论 -
按行分割文本函数(C++)
文本分割函数:这个函数的主要目的是将一个给定的字符串按照换行符(\n或\r\n)进行分割,并将分割后的每行字符串存储在一个std::vector中原创 2024-12-25 16:37:17 · 311 阅读 · 0 评论 -
获取系统已运行时间
系统的已运行时间(单位:秒): C C++原创 2024-08-23 16:49:26 · 178 阅读 · 0 评论 -
获取当前系统时间,精确到毫秒
获取当前系统时间,精确到毫秒 :C C++原创 2024-07-19 09:10:19 · 367 阅读 · 0 评论 -
UTF-8 转换 Unicode
【代码】UTF-8 转换 Unicode。原创 2024-07-18 15:29:38 · 351 阅读 · 0 评论 -
Unicode 转换 UTF-8
【代码】Unicode 转换 UTF-8。原创 2024-07-18 15:19:59 · 444 阅读 · 0 评论 -
utf8汉字字符和拼音的映射结构
utf8汉字字符和拼音的映射结构:大概像下面这样,太大不全,附件看里面是全的。原创 2024-07-10 16:25:47 · 454 阅读 · 0 评论 -
C++虚拟继承
CChildA虚拟继承CParent,编译器会在它的对象的首地址的位置,添加一个虚基类表指针vbptr指向派生类(CChildA)的virtual bass class table(虚基类表),虚基类表中存放的是派生类的虚基类表指针到虚基类实例指针的偏移量。CChildC的大小应该是:2个vbptr + 1个继承自CChildA的m_nChildA + 1个继承自CChildB的m_nChildB + 1份自己新增的m_nChildC + 1份CParent m_nParent拷贝。原创 2024-07-05 10:10:12 · 910 阅读 · 0 评论 -
C和C++中 do{}while(0) 有个简化代码的用处
C和C++中 do{}while(0) 有个简化代码的用处:很多公司不让使用goto,写代码的过程中实际上有很多错误的处理实际上都是相同的逻辑,在不使用goto的时候,可以考虑将代码主要逻辑放到do{}while(0)中来处理,这样可以吧相C和C++中 do{}while(0) 有个简化代码的用处同的处理放到do{}while(0)之后,不需要再前面添加很多相同处理的逻辑,可以让代码更简洁,达到部分goto效果。//业务逻辑 , 需要时直接使用break跳出循环。//主要是错误处理和一些简单的处理。原创 2024-06-24 14:36:09 · 180 阅读 · 0 评论 -
C++ 临时对象的生存周期:没有引用的前提下,存续周期为当前行行代码。下一行代码执行前临时对象被销毁
此问题源于项目中的使用到Jsoncpp的函数asString()返回的临时临时对象, strcpy有概率出现copy的数据为空。后面发现是 JsonString.asString()被销毁造成的。写了一个测试代码,来测试这种情况的临时对象的生存周期。原创 2023-07-13 13:46:21 · 171 阅读 · 1 评论