C++
C++ 语言特性、标准库与常见陷阱
- union:多个成员共享同一段内存
union 是 C 语言延续下来的一种复合类型,它可以把多个成员打包成一个类型(这种让多个成员叠在同一块内存上的做法,在主流语言里并不多见)。
- 数据类型:从机器码到 C++,它到底解决了什么问题
你可能是一个经验丰富的程序员,也可能是一个初入此道的新人,但你是否想过数据类型到底代表着什么?
- 从 struct 到虚继承:用汇编探秘 C++ 对象的内存布局
学过 C++ 的朋友肯定都知道:在 C++ 类外访问 private 和 protected 成员,编译器是会报错的。
- 指针的本质:用 x86-64 汇编看清地址、解引用
很多教材讲指针的时候都会说:指针是存地址的变量。
- 探秘一次简单的函数调用:用 x86-64 汇编看清入栈、出栈与局部变量内存布局
c include
- C++ 多态:工作原理、底层实现与选型要点
多态是面向对象程序设计的三大支柱之一,也是 C++ 面试里被问得最勤的主题。许多教材把多态讲成一句“同一接口、多种实现”,但停留在比喻层面无助于应对追问:虚函数究竟怎么在运行期找到正确的函数?虚函数表的存在会给对象增加多少内存?多重继承下为什么会出现 this 指针调整?构造函数
- C++ 28 种初始化方式,还有哪个编程语言可以这么乱的?意外不?
最近在浏览博文的时候无意间看到了一个信息“C++ 的初始化方式有20多种”,当时就给我震惊到了。
- 面试题:通过 fork 创建的子进程默认会继承哪些资源?如何限制资源被子进程继承?
fork 是 UNIX/Linux 进程模型的基石系统调用,也是系统编程与后端开发面试的高频考点。它能区分候选人对进程、内存与文件模型的理解深度:只背过函数原型的同学往往只能说出"复制一份进程",而能讲清返回值语义、写时复制、资源继承边界与并发陷阱的人,通常对操作系统有更扎实的功
- 面试题:栈内存与堆内存,面试高频考点解析
栈内存和堆内存是 C/C++ 面试里出场率最高的基础题,几乎每一场技术面试都会触碰。它能区分候选人对语言底层机制的理解深度:只会写业务代码的同学往往只能答出自动分配和手动分配,而能讲清生命周期、分配效率、线程安全与选型逻辑的人,通常对系统编程有更扎实的功底。
- 面试题:char *p[10] 分配了几块内存
这是一道涉及指针与数组声明的常见面试题。混淆指针数组与数组指针,是较易出现的理解偏差。
- C++ 格式化输出方案汇总:从 printf 到 std::println
C++ 一出生就继承了 C 的 printf,但"格式化输出"的方案确一直在变,反正在我熟悉的编程语言里C++输出方案是最多的一门语言了。
- C/C++ 调用约定详解
在 C/C++ 里,调用约定(Calling Convention)是一套规则,规定函数调用时参数怎么传、栈由谁清理、返回值怎么交回。它保证调用方和被调用方对一次调用长什么样理解一致。不同约定影响代码体积、性能和跨模块互操作性。
- C++ 多字节编码:从字符集历史到跨平台实战
配套可编译源码:本文所有代码均已上传至 GitHub 仓库 [os-artificer/notes](https://github.com/os-artificer/notes),位于 src/cpp/cpp-multibyte-encoding/ 目录,在仓库根目录执行 mak
- Linux 平台 C++ 热更新技术:从原理到实践
你有没有想过,一个跑在线上的游戏服务器,能不能在不重启的情况下修一个 bug?一个正在处理百万并发请求的后端服务,能不能在用户无感知的情况下升级某个模块?
- C++ 类型擦除:原理、备选方案与从 C++11 到 C++98 的两份参考实现
std::function 能装下函数、lambda、绑定器;std::any 能装下任意类型;std::sharedptr 在不暴露 T 的析构方式的前提下,依然能在控制块里"记住"该用谁来 delete,这些"看起来不可能"的事,背后用的都是同一类技术:类型擦除(Type E
- 86 条 C/C++ 错误范例
1:使用未初始化变量(读取垃圾值 / UB)
- C++ 多线程用法与并发控制详解
C++11 起,标准库正式提供了线程、互斥量、条件变量、原子类型与异步任务支持,分别位于 、、、、 头文件中。下面按语法特性,把“怎么开线程”和“怎么控并发”捋一遍。
- C++ 内存池:为什么、何时用、怎么造、社区里有哪些轮子
系统自带的 malloc / new 通用、正确、久经考验,但在固定对象尺寸、极高分配频率、严格延迟上限的场景里,往往会成为瓶颈或抖动来源。
- C++ 线程池实现全方案:从中央队列到工作窃取
线程池在 C++ 工程里几乎无处不在:它把“创建/销毁线程”的成本摊薄,把“任务提交”从业务逻辑里解耦出来,并通过队列与同步机制把并发的复杂度集中到少数模块中。
- C++ 函数:重载、覆盖、隐藏
面向对象里这三个词都带个"函数",意思却差很远:重载是同一作用域里"同名多份";覆盖是继承里重写虚函数;隐藏是派生类里同名把基类的给挡了。下面分三块捋一遍,最后给张表对照。
- C++ 模板:泛化、实例化、特化
读 STL、Boost 这类库时,满眼都是 template,不搞懂泛化、特化和实例化,很容易卡在源码门口。这篇文章咱们把三件事捋清楚:它们各是啥、编译器怎么选版本、顺带用一个"类型是否相同"的小例子串起来。
- C++ 枚举类型:特点、用法与注意事项
枚举(enum)本质就是一组"具名整型常量"的集合:用名字替代魔法数字,读起来省心,改起来也集中。C++ 这些年对枚举的升级很明确:从"像 int"的老枚举,演进到"独立类型"的 enum class,再到 C++20/23 补齐易用性细节。
- C++ 高性能编程之无锁队列的实现原理
无锁队列不用互斥锁,靠"原子操作"和"内存序"让多线程安全地入队、出队。实现方式可以从两个维度看:并发模型(谁在生产、谁在消费)和同步机制(用哪种原子原语)。下面按这两条线捋一遍,最后给一个 SPSC + 原子 load/store 的简单例子。
- C++ 各版本"限制继承"都有哪些招?
一说"限制继承",其实有两层意思:一是不让别人再继承这个类(终结类),二是不让子类再重写某个虚函数。本文按 C++ 版本捋一遍,怎么实现、怎么选。
- C++ 匿名 namespace 有什么作用?
C++ 中匿名 namespace(匿名命名空间)的核心作用:用于实现文件级私有作用域的特性,是替代 C 语言 static 修饰全局变量/函数的更优方案。