
C/C++
文章平均质量分 79
CodeWithMe
拒绝低质量努力 //一直在学习的软件菜鸟~
Target: 栈溢出工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C/C++】explicit_bzero
特性说明安全不会被编译器优化用途清除密码、私钥等敏感数据可移植性glibc 2.25+、BSD、macOS 支持,Windows 需替代方案推荐场景密码学、加密库、认证信息清除等。原创 2025-07-27 00:01:14 · 612 阅读 · 0 评论 -
【C/C++】Undefined reference: memset_s
你所使用的 libc 实现并不包含memset_s问题说明memset_s链接失败因为 glibc 没有实现它需要定义宏安全需求memset可能被优化掉,memset_s不会兼容方式自己封装 volatile 写法在Linux 上实现类似 memset_s 的安全清零函数(比如用于密码清除),推荐用(glibc 2.25+)或手动实现 volatile 写法。原创 2025-07-26 23:57:14 · 409 阅读 · 0 评论 -
【C/C++】为什么 C++ 的设计会影响 JVM 的性能表现?
因为 C++ 要求极致性能,迫使 CPU 设计者(如 Intel、IBM) 保留尽可能弱的内存模型和强大的乱序执行能力;而 Java 虚拟机(JVM)运行在这些 CPU 上,它必须在这些弱内存模型上强行实现更严格的 Java 内存模型(JMM),这会导致额外同步指令和屏障,降低 JVM 性能。所以,如果为了 Java 而强制 CPU 或语言统一为 JMM 风格,就会反过来让 C++ 性能下降(甚至 JVM 本身也受损),这就是 Bjarne 提出的反对点之一。原创 2025-07-16 00:53:06 · 912 阅读 · 0 评论 -
【读书笔记】《Computer Systems: A Programmer’s Perspective》第2章 Representing and Manipulating Information
逻辑代数(AND, OR, NOT, XOR)是数字电路基础。真值表、逻辑表达式简化、和硬件实现均在学习范围内。题目范围考察点核心策略位操作任务位掩码、逻辑/算术移位精确位置选取、folding、shift+mask溢出与优化溢出检测、偏移调整移位生成偏移、符号位操作浮点操作IEEE‑754 编码与舍入位域操作、判断特殊值、自定义舍入。原创 2025-07-15 07:39:22 · 1111 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》第七章:The Concurrency API
条目建议35优先使用基于任务的并发(如std::async)而非裸线程36如果确实需要异步执行,明确指定37保证所有路径上在析构前不可 joinable38注意不同平台对的实现细节和调度差异39使用实现一次性事件通知40使用进行线程同步,volatile仅用于特殊内存访问现代 C++ 的并发库为我们提供了强大的工具,但也要求我们有明确的语义意识和生命周期管理。只有精确掌握任务、线程、通信与原子操作的边界,才能写出安全、可移植、可扩展的并发代码。原创 2025-07-14 08:07:48 · 720 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》第六章: Lambda Expressions
Lambda 表达式是现代 C++ 最强大也是最常用的语法工具之一。条目建议31避免[=]或[&],改用显式捕获32使用 init capture () 移动资源进闭包33对泛型参数使用保持值类别34优先使用 Lambda,避免使用std::bind通过正确使用 Lambda,你不仅可以简化代码、提升性能,更能避免因隐式捕获、复制、转发失败而带来的微妙错误。这是写出现代、高效、健壮 C++ 的基础能力之一。原创 2025-07-14 08:04:26 · 955 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》第八章 Treaks
本章围绕“微调”的两个建议,着眼于优化函数参数传递与容器操作这两个频繁操作的细节层面。条目建议Item 41对于总是被拷贝、可高效移动的参数,考虑按值传参Item 42优先使用emplace族函数,避免冗余构造和复制它们并不依赖语言新特性,却体现出对代码性能与可读性的深度考量。在代码设计已趋稳定的阶段,这类“微小优化”往往成为衡量代码精致程度的重要标志。原创 2025-07-13 23:59:52 · 631 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》第五章 Rvalue References, Move Semantics, and Perfect Forwarding
/ 仅声明无定义 → 链接失败完美转发并非“完美无缺”;使用时需对边界情况保持敏感;出现奇怪错误时,可回退到按值或const&。本章内容涵盖了右值引用的语法基础、移动语义的工程意义,以及完美转发在模板编程中的实战应用。在现代 C++ 中,高效地使用这些特性是性能优化和泛型代码设计的基石。什么时候用std::move、什么时候用;如何区分 universal reference 和 rvalue reference;如何优雅地处理完美转发失败;原创 2025-07-13 23:19:53 · 784 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》第4章 Smart Pointers
Pimpl 模式目的隐藏实现细节、减少头文件依赖、加快编译速度。头文件中声明不完整类型,实际数据保存在实现类 Impl 中。头文件示例(Widget.h)public:Widget();~Widget();private:实现文件示例(Widget.cpp)// 数据成员原因与好处Impl 定义对外部不可见,确保封装性;修改 Impl 后只需重新编译 cpp,减少依赖传播;特殊成员函数在 cpp 中定义时,Impl 完整可见,避免不完整类型使用错误。原创 2025-07-13 23:02:34 · 654 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》第3章 Moving to Modern C++
旧习惯private:仅在不定义函数时会在链接期报错,且误报位置不直观。现代做法public:建议对于不希望调用的函数,使用= delete,让编译器在编译期明确报错并指出源位置。原创 2025-07-13 22:55:33 · 1063 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》第二章:auto
C++11 引入auto关键字,让编译器根据初始化表达式自动推导变量类型。在以下场景中,autoautoautoauto&&然而,auto并非万能,滥用可能导致类型意外退化或丢失const/引用语义。因此,本章提出两条最佳实践。原创 2025-07-13 22:26:22 · 307 阅读 · 0 评论 -
【读书笔记】《Effective Modern C++》Chapter 1: Deducing Types
C++11/14 引入了强大的自动类型推导机制,让我们可以借助模板参数推导、autodecltype等关键字以更少的代码表达更丰富的泛型逻辑。但这些便利背后有着诸多细节:不同场景下推导规则各异、数组和函数会“退化”、以及如何准确地查看编译器真正推导的类型。理解这些规则,既能让代码更简洁,也能避免性能陷阱和难以察觉的 bug。原创 2025-07-13 20:26:57 · 793 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第十章与第十一章 The Singleton Pattern & The Last Guideline
确保类在系统中只有一个实例,并提供全局访问点。public:private:听起来没问题?其实隐藏了重大的设计隐患。内容核心关键要点Singleton 是实现细节,不是架构主张它隐藏依赖、妨碍测试、耦合状态更好的方式是依赖注入和接口分离用 Strategy 模式组合替代模式之间应灵活组合、替换、转化不应生搬硬套传统结构图学习设计模式是设计思维的启蒙最终目标是写出可演化的系统。原创 2025-07-13 20:16:01 · 1043 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第九章:The Decorator Design Pattern
在现实系统中,我们常常需要在不修改已有类的前提下,为对象添加新功能——比如增加日志记录、性能度量、缓存行为等等。这种是软件工程中典型的需求。正是为此而生的一种经典结构型设计模式。它提供了一种透明、组合式的方式来增强对象的行为,是继承替代方案中最灵活的一种。原创 2025-07-13 19:02:35 · 849 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第八章 The Type Erasure Design Pattern
Type Erasure 的调用性能略低于虚函数(1.1~1.3x)但在缓存友好、编译期复杂度更低的上下文中可能胜出若启用 Small Buffer Optimization,性能可大幅提升特性拥有式类型擦除非拥有式类型擦除所有权封装器持有对象外部持有生命周期管理自动析构需外部管理分配成本有(除非 SBO)零分配性能略逊色(取决实现)高性能,接近裸函数调用使用难度容易(如 std::function)中等,需要手动维护调用接口类型擦除设计模式。原创 2025-07-13 18:41:34 · 604 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第七章:Bridge、Prototype 与 External Polymorphism
Bridge 模式的核心思想是将“抽象接口(Abstraction)”与“具体实现(Implementation)”分离,从而使它们可以独立演化。目的:将接口和实现分离以减少物理依赖、降低构建成本。传统多态依赖继承与虚函数,但这要求你侵入类定义。External Polymorphism 提供了一种非侵入式运行时多态实现方式。模式核心作用优点缺点Bridge抽象接口与实现分离架构解耦、支持独立演化抽象复杂、增加间接层级Prototype抽象复制机制支持克隆任意派生对象。原创 2025-07-13 18:30:24 · 922 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第六章深入剖析 Adapter、Observer 和 CRTP 模式
Observer(观察者)是一种发布-订阅(Publish-Subscribe)机制,当“主题对象”状态变化时,通知所有观察者对象。模式名称本质功能推荐场景Adapter接口兼容/转换第三方库/统一标准Observer解耦事件通知机制GUI、MVC、数据流架构CRTP静态多态与类型增强零运行开销的行为复用、类型封装它们分别强调了接口适配、事件解耦和静态行为增强的不同维度,是 C++ 软件设计中的“三剑客”。原创 2025-07-13 18:26:25 · 507 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第五章:The Strategy and Command Design Patterns
深入探讨传统面向对象实现存在的不足,以及如何借助现代 C++ 的特性(如模板、、值语义)来替代经典写法。原创 2025-07-13 15:51:32 · 592 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第四章:The Visitor Design Pattern
本章通过对比多种实现方式(面向过程、动态多态、 及 acyclic visitor),深入探讨如何在“类型扩展”与“操作扩展”之间进行权衡,并给出实用建议。 为抽象元素,定义 。 实现 并调用 。 定义所有 函数。 提供操作的实现(如 Draw、Area)。Guideline 15: Design for the Addition of Types or Operations本节关注“在已有数据结构上增加新操作”的设计问题 —— 典型的开放-封闭冲突问题。描述:最直接的方式是使用 或原创 2025-07-13 12:04:23 · 628 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第三章 The Purpose of Design Patterns
含义:模式通过抽象接口(基类或概念)把“可变部分”和“固定部分”分离。示例(装饰者模式 Decorator)void operation() override { /* 原始逻辑 */ }public:// 额外行为(前)// 额外行为(后)抽象接口Component定义了通用契约,装饰者Decorator只需依赖该接口即可插入额外职责。原创 2025-07-13 00:39:03 · 824 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第二章:The Art of Building Abstractions
示例场景:实现一个Stack<T>类时,提供pop()方法返回T&,但在空栈调用时未抛出异常,而是返回未定义引用。问题:客户端无法预期pop()行为,违反直觉。解决方案改用返回值,或抛出明确异常。添加文档注释,明确表明函数的异常保证级别(noexcept 语义)。要点:抽象应贴合领域概念,避免陷入技术细节。示例:定义Moneylong cents;public:好处:减少单元转换错误,增强类型安全性与可读性。优势:支持对第三方类型扩展接口,无需修改原始类。示例实践示例} };原创 2025-07-13 00:07:50 · 418 阅读 · 0 评论 -
【读书笔记】《C++ Software Design》第一章《The Art of Software Design》
依赖管理依赖倒置public:/*...*/ }效果:业务逻辑与具体日志实现解耦,可在运行或编译时替换不同 Logger。抽象层次分层架构:界面层、业务层、数据层;每层仅通过接口通信。DAO 模块暴露接口Service 模块仅持有UI 模块调用 Service,无需知道底层实现。原创 2025-07-12 23:00:03 · 617 阅读 · 0 评论 -
【C/C++】编译期计算能力概述
随着 C++ 标准不断完善,编译期执行能力与元编程框架将更加统一与强大。完整的反射支持、元对象协议、以及更丰富的编译期执行环境,将使得 C++ 在 DSL(领域专用语言)、高性能库开发、跨语言绑定等领域拥有更大竞争力。我们有理由相信,在不远的将来,C++ 将真正实现“零开销抽象”的最终形态——不仅在运行时零成本,也在编译期为开发者提供前所未有的表达力与安全性。原创 2025-07-12 22:46:54 · 655 阅读 · 0 评论 -
【C/C++】迈出编译第一步——预处理
文件包含(File Inclusion)将被#include的头文件内容插入到源文件中,形成“单一翻译单元”(Translation Unit)。宏定义与替换(Macro Expansion)通过#define指令定义符号常量和宏函数,编译器在预处理阶段将宏替换为相应文本或表达式。条件编译(Conditional Compilation)根据条件选择性地包含或排除源代码片段,如#if#ifdef等。行控制与其他指令包括#line#pragma#error。原创 2025-07-12 22:43:40 · 733 阅读 · 0 评论 -
【C/C++】无处不在的模板编程 之 vector模板应用
特性描述泛型化使用模板支持任意类型元素高性能对基本类型优化、使用指针操作可定制分配器模板参数可更换内存策略类型安全模板确保类型一致性灵活迭代器使用模板嵌套类型定义灵活迭代器模板技巧使用 SFINAE、类型萃取、偏特化实现重载选择与优化模板不仅是vector的技术支撑,更是现代 C++ 的核心力量。深入理解模板的使用原理与技巧,不仅能让你读懂 STL,更能让你在构建自己的泛型组件、通用框架时游刃有余。原创 2025-07-12 08:15:34 · 1042 阅读 · 0 评论 -
【C/C++】thread库学习 之 管中窥豹
是现代 C++ 并发编程的重要基石,尽管功能相对底层,但它提供了统一的接口和强类型安全的语义,在多线程程序中起到了关键作用。理解其接口设计、生命周期语义与典型用法,对于构建高效、可靠的并发系统至关重要。C++ 的提供了一个轻量但强大的原始线程接口,适合构建并发程序的底层模块。小规模线程可直接使用;大规模并发更应采用线程池或 async/future 等模型;高性能设计则需结合原子变量、锁优化、任务划分等综合策略。在大型系统中,推荐以。原创 2025-07-12 07:52:56 · 1125 阅读 · 0 评论 -
【C/C++】动态内存分配:从 C++98 裸指针到现代策略
自行实现继承缓存或限额策略,然后传给。场景推荐方式普通项目容器 + 智能指针(unique_ptrvector性能敏感 / 实时应用, 自定义 allocator共享所有权shared_ptrweak_ptr短期请求生命周期。原创 2025-07-11 23:12:38 · 1275 阅读 · 0 评论 -
【Linux】C++项目分层架构:核心三层与关键辅助
原则描述单一职责每层专注职责,降低耦合。依赖方向上层依赖下层,使用接口抽象其依赖。可替换实现数据层可不换存储,UI 可切换视图方式。可测试性接口 + 模拟让单测成为可能。模块化构建分库/分模块,支持并行开发和CI。日志与配置用统一工具支撑整个系统。是一套由 FrankBuschmann等人于 1996–2007 期间陆续出版的系列著作,旨在从体系结构视角系统化地阐述软件模式(patterns)([Wikipedia][1])。– 大型系统的结构、设计和细节习惯;原创 2025-07-11 23:02:52 · 1377 阅读 · 0 评论 -
C++高效结合主流工具:现代系统底层动力
虽然 C++ 并不是“最轻松”的语言,但它的性能、底层控制能力和成熟生态,使其成为现代系统架构的关键一环。通过与 Nginx、Kafka、Redis、Prometheus、gRPC 等工具灵活结合,C++ 不再只是写底层驱动或游戏引擎,它可以在数据流转、服务治理、监控告警等系统级问题中展现力量。持续学习和集成更多工具,是 C++ 工程师走向全栈架构思维的必经之路。hiredis。原创 2025-06-29 22:05:39 · 1195 阅读 · 0 评论 -
【C/C++】C++26新特性前瞻:全面解析未来编程
c++26原创 2025-06-27 23:55:53 · 1747 阅读 · 0 评论 -
【C/C++】单元测试实战:Stub与Mock框架解析
单元测试框架原创 2025-06-27 23:30:00 · 1283 阅读 · 0 评论 -
【C/C++】无锁队列实现与内存回收机制:Hazard Pointer 深度解析
无锁队列实现与内存回收机制:Hazard Pointer 深度解析原创 2025-06-27 00:15:00 · 1518 阅读 · 0 评论 -
【C/C++】彻底搞懂 CAS 与 ABA 问题:实现一个无锁栈
彻底搞懂 CAS 与 ABA 问题:实现一个无锁栈原创 2025-06-26 20:30:00 · 367 阅读 · 0 评论 -
【C/C++】原子操作详解与底层处理机制
原子操作详解与底层处理机制原创 2025-06-26 09:00:00 · 909 阅读 · 0 评论 -
【C/C++】汇编语言基本语法
汇编语言由段和指令组成,分明的代码结构是清晰编程的基础。掌握基础指令及寄存器用法是汇编编程核心。汇编支持多种寻址方式,灵活操控内存和寄存器。标签与跳转是控制流实现的关键。伪指令帮助数据定义与空间管理。通过示例掌握程序入口和系统调用能快速入门。调试工具是理解汇编执行过程的必要利器。原创 2025-06-25 22:43:08 · 771 阅读 · 0 评论 -
汇编语言:从入门到实战的终极指南【大纲】
汇编 ≠ 机器码 ≠ C汇编是指令的助记符表示汇编器将其翻译为目标机器码图形化分析工具,适合逆向支持多平台、多架构示例:分析 C 编译出的函数入口汇编是连接硬件与软件的桥梁掌握汇编是成为高级开发者的必经之路从 CPU 指令到系统行为,都能通过汇编理解与调试汇编能让你写出更稳、更快、更可靠的代码。原创 2025-06-25 07:51:10 · 1107 阅读 · 0 评论 -
【C/C++】趣味题目:二维数组地址
趣味题目原创 2025-06-24 23:07:40 · 188 阅读 · 0 评论 -
【C/C++】C++ 编程规范:101条规则准则与最佳实践
C++ 编程规范:101条规则准则与最佳实践原创 2025-06-24 22:52:00 · 1203 阅读 · 0 评论 -
【闲谈】打不过就加入,开始靠近AI
C++ To AI原创 2025-06-24 09:00:00 · 640 阅读 · 0 评论 -
【闲谈】汇编还需要浪费精力学吗?
高级编程语言之父 —— 汇编原创 2025-06-23 09:00:00 · 1056 阅读 · 0 评论