C++11
文章平均质量分 80
fpcc
行之苟有恒,久久自芬芳!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
跟我学c++中级篇—类型定义的方式
本文系统阐述了编程中类型定义的重要性及c++中的实现方式。重点对比了宏定义、typedef与modern using三种机制,指出using在可读性、灵活性和模板支持上的优势,推荐优先使用。同时提醒开发者注意别名滥用、类型歧义、错误信息冗长等问题,强调统一规范与合理设计。最终结论:在现代c++开发中,应以using为主,兼顾简洁性与可维护性,避免陷入命名混乱与编译困境。原创 2026-11-10 10:31:43 · 88 阅读 · 0 评论 -
跟我学c++中级篇—智能指针的创建方式分析
智能指针通过自动管理内存资源,显著提升C++代码安全性与可靠性。推荐优先使用make_shared和make_unique,因其减少内存分配次数、增强异常安全、代码更简洁,并避免重复管理风险。仅在自定义删除器、私有构造函数、三方指针接管、自定义分配器或大缓冲区清零等特殊场景下才需使用原始指针。统一使用智能指针可提升团队协作效率与代码鲁棒性,是现代C++开发的基石。原创 2026-11-06 09:09:03 · 213 阅读 · 0 评论 -
c++编程实践—内存优化的具体应用
本文系统分析了实际开发中常见的内存优化场景,强调应聚焦瓶颈而非过度追求细节。重点包括:函数参数传递(值、引用、视图、移动语义的合理选用)、容器扩容时的预分配与移动语义应用、字符串操作中的SSO、临时对象与中间结果消除、尾调用优化与RVO/NRVO的适用条件,以及DMA/DirectIO等硬件级零拷贝技术。指出优化需结合性能瓶颈,避免为微小收益过度重构,核心原则是“抓大放小,直击痛点”,实现高效内存管理。原创 2026-11-05 10:30:34 · 668 阅读 · 2 评论 -
c++编程实践—设计开发的几点建议
本文从文档、代码效率与可维护性、重构、团队协作、技术迭代及AI应用等九个维度,系统阐述软件开发全过程的关键要点。强调文档应聚焦核心接口与架构,代码需兼顾高效与可维护,重构须顺应发展滞后性,团队合作依赖统一标准与CI/CD流程,新技术引入应理性评估,AI则应作为提效工具而非替代。最终指出:在AI冲击下,开发者更应聚焦设计思维与持续学习,于变革中把握机遇。原创 2026-11-04 10:48:42 · 203 阅读 · 0 评论 -
跟我学c++中级篇—streambuf在glog中的应用分析
本文分析谷歌glog v0.6.0中std::streambuf的实战应用,通过自定义LogStreamBuf实现零堆分配、固定缓冲区、静默截断与零拷贝写入。其核心机制为:利用setp()设定可写区域,重写overflow()丢弃超限字符但不报错,结合LogStream绑定缓冲区,确保日志格式化高效且无内存开销。该设计兼顾性能与稳定性,是高性能日志系统中streambuf深度定制的典范。原创 2026-10-30 09:40:32 · 292 阅读 · 0 评论 -
跟我学c++中级篇—streambuf应用
本文系统阐述了C++ streambuf的实际应用,涵盖直接调用接口与继承自定义行为两种方式。重点介绍其在输入输出处理、日志增强、数据编码及测试模拟等场景的应用,并强调生命周期管理、同步机制与虚函数重写等关键注意点。通过自定义输入/输出缓冲区示例,展示了如何基于文件描述符实现高效流操作,凸显streambuf在底层数据流控制中的灵活性与强大功能。原创 2026-10-29 10:37:13 · 159 阅读 · 0 评论 -
跟我学c++中级篇—streambuf的分析
C++流机制基于职责分离设计,核心为流操作类与streambuf缓冲管理类。basic_streambuf负责底层字符缓冲的读写控制,通过eback、gptr、egptr等指针管理输入区,pbase、pptr、epptr管理输出区,并支持underflow、overflow等重写接口实现自定义缓冲逻辑。imbue用于本地化设置,sync、seekoff等提供同步与定位功能。示例中通过继承streambuf实现零字节过滤,展示其灵活性。虽流机制争议较大,但在日志、数据处理等场景仍具实用价值。原创 2026-10-28 10:47:29 · 71 阅读 · 0 评论 -
C++网络编程之kqueue补充完善和应用
本文系统阐述kqueue在实际工程中的应用,涵盖过滤器细节(如定时器、信号、文件监控等)、多线程模型设计、生产环境优化及常见问题排查。强调非阻塞I/O、事件注册管理、生命周期控制与资源限制的重要性,并通过实例展示如何构建高效、稳定的网络服务,适用于高并发场景下的高性能服务器开发。原创 2026-10-26 10:40:01 · 149 阅读 · 0 评论 -
并行编程实战—CUDA中的Tile编程之八优化提示
CUDA Tile优化提示(cutile::hint)是用于指导编译器生成高效代码的元数据,不改变程序语义,仅影响编译优化。支持C++和Python,通过属性或装饰器参数指定,如num_ctas、occupancy、latency、allow_tma等,可按架构定制。提示独立作用于特定代码块,编译器可忽略或选择最优策略。示例展示如何在内核和内存操作中设置提示,实现性能调优与自动调优。原创 2026-10-24 09:36:02 · 158 阅读 · 0 评论 -
C++网络编程之kqueue初步介绍
kqueue是BSD系统(如FreeBSD、macOS)提供的高效事件通知机制,支持文件描述符、文件系统、信号、定时器等多类事件的就绪监听。其核心接口kevent可批量注册与等待事件,减少系统调用。通过struct kevent定义事件,使用EV_SET宏初始化,支持水平触发与边沿触发(配合EV_CLEAR)。过滤器类型丰富,涵盖I/O、进程、文件变化等,适用于高性能网络服务与系统监控。但仅限于BSD及macOS平台,不适用于Linux或Windows。原创 2026-10-23 10:49:36 · 74 阅读 · 0 评论 -
计算机原理—如何高效的操作文件
本文系统分析了文件操作的三层架构(应用层、系统层、硬件层),强调通过减少系统调用、优化访问模式、合理利用缓存与异步IO提升性能。重点指出页缓存、预读、零拷贝(如sendfile)、fsync控制及硬件特性(如NVMe并行性)对效率的关键影响。结合C++示例,展示了高效文件操作实践,包括批量写入、顺序访问提示、数据同步策略与资源管理,最终建议通过监控IOPS、延迟等指标进行调优,实现性能与可靠性的平衡。原创 2026-10-22 10:33:07 · 506 阅读 · 0 评论 -
c++20新功能—std::atomic中的wait和notify
C++20引入std::atomic::wait、notify_one和notify_all,实现原子值变化的轻量级阻塞等待机制,适用于状态机、事件通知等场景。其核心是基于原子值比较的等待与唤醒,避免“通知早于等待”问题,但需注意:不自动保护共享数据,仍需同步手段。支持内存序控制,notify无内存序参数,同步依赖store与load的配合。相比条件变量,无需互斥量、不支持超时,但更高效且适合简单状态切换。使用时需循环检查状态,防范假唤醒与ABA问题,必要时结合版本号。二者可互补使用。原创 2026-10-20 10:15:10 · 452 阅读 · 0 评论 -
c++编程实践—全局变量的加载和初始化顺序
本文深入剖析C++静态初始化顺序问题(SIOF),揭示跨编译单元全局变量初始化顺序不确定的根源。基于Linux平台,阐明加载(自上而下)与初始化(自下而上)的分离机制,强调“加载≠初始化”的关键认知。通过分析主程序与动态库、模块间等典型场景,指出零初始化与动态初始化的本质差异,警示构造函数依赖引发未定义行为的风险。结合dlopen动态加载特性,提出设计控制、常量初始化、局部静态变量、依赖注入等实用解决方案,最终强调:唯有显式管理初始化顺序,方能从根本上规避SIOF问题。原创 2026-10-19 11:45:31 · 199 阅读 · 0 评论 -
AI和大模型—Agent常见架构
本文系统梳理了Agent开发的核心架构体系,从早期单体架构到多Agent协同,涵盖决策控制、工作流编排与分布式协作等主流模式。重点分析ReAct、Plan-and-Execute、Reflexion、Router+Skills、Blackboard及Graph Workflow等典型架构的适用场景与优劣。强调:Agent架构无绝对优劣,需结合具体需求、可控性与复杂度权衡选择。核心在于理解其本质——以大模型为引擎的智能任务执行系统,并借鉴软件工程经验,灵活应对快速迭代的技术变革。原创 2026-10-18 09:24:44 · 193 阅读 · 0 评论 -
跟我学c++中级篇—c++17中的pmr
C++17引入的PMR(多态内存资源)机制,通过memory_resource抽象基类与polymorphic_allocator实现运行时动态内存分配管理,支持细粒度内存控制、跨平台共享及模块间接口统一。其核心优势在于类型擦除带来的灵活性,允许容器在运行时指定分配器,如monotonic_buffer_resource用于批量分配、pool_resource优化小对象复用。开发者可通过自定义资源或标准资源实现高效内存管理,结合RAII确保资源安全释放,适用于高性能、嵌入式及复杂内存策略场景。原创 2026-10-16 09:28:46 · 466 阅读 · 0 评论 -
c++编程实践—内存分配器的使用
本文介绍了内存分配器在实际应用中的三种主要方式:直接使用、封装使用和C++17的pmr多态内存资源。直接使用适用于局部场景,但存在兼容性风险;封装使用通过自定义分配器或对象包装提升灵活性与安全性,尤其适合容器和智能指针;pmr则实现运行时动态替换内存管理策略,解耦分配逻辑与类型。文中强调了tcmalloc新旧API不可混用,且推荐结合具体场景选择合适方案,以高效利用内存资源。原创 2026-10-15 10:34:26 · 571 阅读 · 0 评论 -
c++20新功能—std::osyncstream
多线程中使用std::cout输出易出现行混杂,因<<操作非原子。C++20引入std::osyncstream解决此问题,通过本地缓冲与原子提交机制实现线程安全输出。其内容在emit()或析构时一次性写入底层流,避免混乱。但需注意:不保证单次<<原子性、必须显式调用emit()、避免跨域使用、慎用于高频日志及自定义流。std::endl才触发刷新,\n不触发。适用场景为低频日志,非万能解药,需结合实际谨慎使用。原创 2026-10-14 13:11:24 · 193 阅读 · 0 评论 -
c++编程实践—thread_local变量的应用
thread_local在实际的开发中,一般程序员用的不多。但在某些场景下,可能有意想不到的作用。但在使用它前,要仔细想一下,thread_local是否是必须的?是否真正提高了效率?是否完全可以被其它替代?只有明白这一系列的关键因素,并掌握前面的细节后,才能够真正的大胆应用thread_local。c++灵活性是给胆大心细的开发者提供锋利的刀,而不是给楞头青提供自杀的匕首。原创 2026-10-13 10:38:23 · 188 阅读 · 4 评论 -
c++编程实践—中文字符的处理
C++处理中文需统一使用UTF-8编码,避免跨平台兼容问题。从源文件、编译到运行时均应保持编码一致,推荐使用u8"..."字面量(C++17起)或std::u8string(C++20)。注意std::string仅存字节,需约定为UTF-8;禁止按字节截取汉字。编译时配置-finput-charset=UTF-8(GCC/Clang)或/utf-8(MSVC),并用CMake统一管理。文件读写以二进制模式操作,路径转换需适配平台(如Windows用UTF-16),终端环境应设为UTF-8。原创 2026-10-09 11:44:50 · 191 阅读 · 2 评论 -
c++编程实践—堆和栈越界调试
内存越界是C/C++开发中的经典难题,栈与堆的越界表现差异显著:栈越界易引发即时崩溃,尤其在启用栈保护时可快速定位;堆越界则常具滞后性,可能延迟至后续操作才触发,错误信息复杂且难以追踪。通过gdb分析core dump,结合bt full、p $_siginfo.si_addr等命令,可有效定位崩溃根源。实例显示,堆越界、野指针、双重释放、非法释放等问题均可能导致严重后果。掌握调试策略与工具使用,是解决此类问题的关键。原创 2026-10-08 10:23:45 · 840 阅读 · 0 评论 -
c++编程实践—为什么需要静态库
静态库在Linux平台中通过打包目标文件实现代码复用与模块化,具备编译期确定性、依赖清晰、部署简便、安全性高等优势,适用于嵌入式、高性能计算、工具类应用及单文件分发场景。其支持链接优化,便于测试与维护,但存在可执行文件体积大、更新需重编译、无法运行时替换等问题。尽管如此,静态库仍因其稳定性和可控性,在特定场景下不可或缺,且常与动态库协同使用以兼顾灵活性与性能。原创 2026-09-24 11:03:48 · 153 阅读 · 0 评论 -
计算机原理—内存分配器的分析
本文分析了主流内存分配器(ptmalloc、jemalloc、TCMalloc、mimalloc、Scudo等)在服务端、桌面及安全场景下的性能与适用性,强调无通用最优解。提出“全局通用+局部专用”组合策略,结合吞吐量、延迟、碎片、安全防护等维度综合评估。重点推荐根据场景选择:高并发用jemalloc/TCMalloc,内存敏感用mimalloc,安全优先用Scudo或hardened_malloc,同时提醒避免盲目替换,需验证兼容性与实际负载表现。原创 2026-09-23 11:21:37 · 677 阅读 · 0 评论 -
c++编程实践—为什么需要动态库
动态库通过运行时加载与共享,实现模块解耦、并行开发与二进制交付,提升系统灵活性与可维护性。其在设计、开发、部署等多维度具备显著优势,如支持插件架构、按需加载、版本独立更新及多进程共享,广泛应用于算法封装、硬件驱动适配、多数据库支持等场景。然而,也面临ABI兼容、版本管理、路径安全及性能开销等挑战,需谨慎设计与管理。总体而言,动态库是应对复杂系统需求、优化资源利用的必然选择。原创 2026-09-22 11:11:31 · 92 阅读 · 0 评论 -
c++编程实践—条件变量的正确使用
条件变量是多线程同步的重要机制,尤其在生产者-消费者场景中有效避免轮询开销。其核心问题包括假唤醒、丢失信号与死锁,其中假唤醒需通过循环判断或谓词机制防范。C语言中需手动使用while循环配合pthread_cond_wait,C++11起推荐使用std::condition_variable结合谓词(如cv.wait(lock, []{return ready;})),可自动处理假唤醒,提升安全性和简洁性。建议开发者优先采用带谓词的C++方式,确保线程安全。原创 2026-09-21 10:11:59 · 388 阅读 · 1 评论 -
计算机原理—构建过程中的分段分析
本文系统阐述了Linux下ELF目标文件的结构与链接机制。目标文件(如.o、.so)由文件头、代码段(.text)、数据段(.data/.bss)及符号表等组成,通过readelf、objdump等工具可查看其段信息与符号详情。链接过程依赖符号解析与重定位(.rela.text),实现跨模块函数调用与地址修正。文中以main.cpp与myrandom.cpp为例,演示编译、链接及调试流程,揭示目标文件在链接阶段的关键作用,强调符号管理与段划分对权限控制与程序复用的重要性。原创 2026-09-15 11:58:30 · 536 阅读 · 3 评论 -
c++编程实践—统一初始化
本文系统阐述C++初始化的重要性与实践方法,强调统一初始化在避免未定义行为、保障数据一致性、提升性能与可维护性中的关键作用。从传统到现代初始化方式演进,结合RAII、构造属性、宏注册等机制,提出通过集中管理实现初始化顺序可控。重点解析C++11/20新特性如constinit、列表初始化及编译期初始化对静态初始化顺序问题(SIOF)的解决,并以组件注册例程展示统一初始化的实际应用,揭示现代C++向清晰、安全、通用化方向发展的趋势。原创 2026-09-09 16:36:45 · 161 阅读 · 2 评论 -
跟我学c++中级篇—大括号初始化问题分析
<think>我们根据用户要求,需要根据提供的文章内容生成不超过150字的摘要。文章主要讨论C++列表初始化(大括号初始化)及std::initializer_list的问题。摘要要简洁概括核心要点。注意字数限制。</think>C++列表初始化虽推荐,但存在细节陷阱:initializer_list构造函数优先级过高、元素只读不可移动、生命周期风险、模板推导困难、空列表歧义等。使用时应区分参数与元素初始化,避免用于不可复制对象,显式指定类型;基本类型与聚合类型仍宜用大括号初始化。原创 2026-09-09 10:25:08 · 473 阅读 · 0 评论 -
c++编程实践—如何理解生命周期
对c++中的生命周期的具体应用进行分析说明原创 2026-09-03 10:17:14 · 587 阅读 · 1 评论 -
跟我学C++中级篇—友元和嵌套类
对c++中的友元和嵌套类进行分析和说明原创 2026-08-31 10:32:40 · 423 阅读 · 0 评论 -
跟我学C++中级篇—static_assert和assert
对c++中的编译期断言和运行时断言进行分析说明原创 2026-08-28 11:32:56 · 501 阅读 · 0 评论 -
跟我学C++中级篇—C++变量初始化分析
对c/c++的初始化发展进行分析说明原创 2026-08-27 10:38:29 · 177 阅读 · 0 评论 -
算法和数据结构—动态规划法
对动态规划法进行分析说明,并给出具体的例程原创 2026-08-26 10:33:23 · 211 阅读 · 0 评论 -
跟我学C++中级篇——编译期的条件选择
对编译期时C++编译器各种条件选择的处理原创 2026-08-25 10:29:27 · 222 阅读 · 1 评论 -
跟我学C++中级篇—编译期检查
对编译期的相关检查进行分析说明原创 2026-08-24 10:38:33 · 350 阅读 · 2 评论 -
并行编程实战—CUDA中的Tile编程之三Tile空间加载与存储
本文介绍了CUDA Tile编程模型中的数据高效处理技术。主要内容包括:(1)数据处理的两种抽象形式:全局可见的数组(Array)和局部可见的数据块(Tile);(2)Tile的两种加载存储方式:Tile空间映射(支持TMA加速)和Gather/Scatter方式;(3)Tile空间加载的具体实现,包括视图对象创建、边界处理机制(PaddingMode)及Python接口示例;(4)不规则数据访问的Gather/Scatter方法;(5)完整示例代码展示了向量加法在多种Tile操作下的实现。文章强调在数据驱原创 2026-08-23 11:28:04 · 224 阅读 · 0 评论 -
C++编程实践—接口数据对象的分析
本文探讨了接口数据对象处理的多种方法及其适用场景。文章指出,开发者往往忽视对接口数据对象的深入处理,但在复杂场景下需考虑效率、扩展性等因素。常见处理方式包括继承、容器、共用体/Variant、类型擦除和函数对象,各有优缺点:继承便于扩展但性能开销大;容器方便但可能浪费资源;共用体灵活但需手动管理;类型擦除灵活但性能低;函数对象高效但复杂。文中提供了C++示例代码,展示函数对象、Lambda和类型擦除的实现方式。最后强调理论需结合实践,开发者应灵活选择适合场景的方法。原创 2026-08-19 10:36:26 · 188 阅读 · 2 评论 -
C++编程实践—跨跃C和C++的指针
一些新的语言如Rust,号称解决了指针问题。但这种问题的解决也是有代价的。开发者总是在限制和灵活中求一个平衡,Rust是对取代C/C++中的指针的一个不错的选择,但未必是唯一的选择。不过总得来看,指针的应用受约束是一个长期的目标。至于约束到何种程度,就得看制定标准的大佬们的思想激进到何种程度了。原创 2026-08-17 10:43:28 · 572 阅读 · 0 评论 -
C++编程实践—C++对接口的设计和开发
本文探讨了C++中接口的设计与实践,从接口的基本概念到具体实现方式进行了全面分析。文章首先指出接口在模块化开发中的重要性,随后详细介绍了C++中接口的多种表现形式,包括函数、类、模板以及C++20中的Concepts等。特别强调了接口设计需要根据不同应用场景(如内部使用、跨平台、分布式等)采取灵活策略,并关注参数传递、数据格式选择和性能优化等关键因素。最后指出优秀的接口设计需要平衡规范性、扩展性和效率,建议开发者通过研究成熟系统(如Linux内核)的接口演变来提升设计能力。全文突出C++接口设计的灵活性和场原创 2026-08-14 09:36:56 · 419 阅读 · 0 评论 -
模板编程—模板类参数的特化顺序
这篇文章主要探讨了C++模板特化中的参数顺序问题。首先介绍了模板特化的两种形式:全特化和偏特化,并指出参数特化是按位置匹配而非名称。然后分析了模板参数特化的顺序规则,强调必须严格按照主模板声明顺序进行,包括变参模板、模板的模板参数等特殊情况。接着通过一个典型例子展示了参数顺序错误导致的模糊匹配问题,如同时存在Test<T,int>和Test<int,U>特化时,Test<int,int>会引发编译错误。文章最后指出模板编程虽复杂,但只要掌握基础规则就能应对大多数问题。原创 2026-08-07 11:07:09 · 574 阅读 · 0 评论 -
跟我学C++中级篇—内存流
本文介绍了内存流的概念、作用及常见应用场景。内存流是数据在内存中的有序传输序列,具有处理速度快的特点,常用于数据缓存、传输、处理和单元测试等场景。文章对比了Linux和Windows平台下的内存流接口函数,并提供了简单的示例代码说明其使用方法。内存流在网络通信、大文件加载、图形处理和安全领域等有广泛应用,但需注意内存占用问题。通过内存流的使用,开发者可以更好地平衡系统设计中的效率与成本。原创 2026-08-06 10:30:08 · 185 阅读 · 0 评论
分享