编译原理入门:词法分析器与 Flex/Bison 黄金搭档实战

在每一个程序员的学习生涯中,“编译器究竟是如何把一堆英文字符代码变成可执行程序的”往往是最令人着迷的谜题之一。 当你键入如下命令准备折腾编译器前端时: sudo apt-get install flex sudo apt-get install bison 你实际上已经推开了计算机科学中最经典、最精巧的技术大门:词法分析器(Lexer) 与 语法分析器(Parser)。 ...

2026年9月23日 · 7 分钟 · 3374 字

深入理解程序内存布局:代码区、全局区、堆区与栈区

在编写程序时,无论是使用 C/C++ 这种面向系统底层的语言,还是 Java、Go、Rust、Python 等拥有运行时环境的高级语言,程序最终都需要被加载到操作系统的虚拟内存中执行。 很多开发者在日常编码中常听到“变量在栈上”、“对象在堆中”、“全局变量存哪里”、“为什么递归太深会导致栈溢出”、“为什么堆内存容易产生碎片”等问题。要彻底理清这些概念,关键在于理解进程的虚拟内存空间布局(Virtual Memory Layout)。 ...

2026年9月23日 · 11 分钟 · 5063 字

Bootlin Elixir:阅读与检索 Linux 内核及开源项目源码的神器

引言 对于从事 Linux 系统开发、驱动编写、嵌入式底层研发以及内核架构学习的工程师来说,阅读庞大的 C 语言开源工程源码是日常必修课。 以 Linux Kernel 为例:代码量已超过 3000 万行,包含海量的宏定义、条件编译分支、结构体指针与跨架构实现。如果直接在本地用普通文本编辑器或 grep 搜索,不仅效率极其低下,而且往往会被巨量的同名变量和宏展开干扰。而在本地配置完整的 LSP(如 clangd)或大型索引工具(如 OpenGrok),不仅极其消耗磁盘与内存,而且在跨版本对比时极其繁琐。 ...

2026年8月28日 · 7 分钟 · 3173 字

MiniWeb: 仅百KB的超轻量嵌入式 C 语言 HTTP 服务器

引言 在嵌入式开发、IoT 设备管理、本地工具调试甚至局域网临时文件共享中,我们经常需要一个轻量的 HTTP 服务端。但现实开发中常常遇到两难选择: 标准 Web 服务器(如 Nginx、Apache):功能丰富,但体积过大、依赖繁杂,无法直接塞入 Flash 只有几兆的 MIPS/ARM 嵌入式设备中; 脚本语言方案(如 Python http.server):在本地开发机上很方便,但在没有 Python 运行时的工控机、单片机或最小化 Linux 系统中寸步难行。 这时候,一个纯 C 语言编写、编译后二进制仅 100KB 左右的超微型 HTTP 服务器——MiniWeb,便成了极具性价比的选择。 ...

2026年8月26日 · 4 分钟 · 1988 字

Hello World

我觉得程序员这个群体是非常幸运的一群人,我们生在一个技术改变世界的时代,而我们可能正做着能够改变世界的技术,这是何等的荣耀和机遇。 ——《MacTalk 人生元编程》 前言 大概每个程序员在开篇都会写一个 Hello World! 来作为开始。这是我的第一篇博客,就来写一写程序员眼中的 Hello World!。 ...

2025年7月15日 · 2 分钟 · 891 字