C++
文章平均质量分 83
C++
YahirQ
你好,我是YahirQ,一个写了十年代码的“老”程序员。
我的技术地图有点广:以 .NET 为根据地,也曾远征 Java、C++、Python 的江湖,并用 Vue、SQL 和 iOS 开发过不少应用。这些经历让我明白,技术之道,万变不离其宗。
而现在,我选择了一条“向下扎根”的道路——嵌入式开发。我着迷于代码如何直接驱动硬件,享受在资源受限的环境下创造价值的乐趣。这对我而言,是一个全新的起点。
在这里,我将以一个“资深新手”的视角,记录并分享从传统软件到嵌入式世界的转型之路。我的文章会力求通俗易懂,既有硬核的代码分析,也有踩坑填坑的实战记录。期待能与志同道合的你一起学习,共同成长!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JIT(即时编译)是什么?
JIT(即时编译)是一种运行时将字节码动态编译为本地机器码的技术,兼具解释执行的灵活性和编译执行的高效性。其核心流程包括:解释执行字节码、识别热点代码、动态编译优化并替换执行。JIT广泛应用于Java JVM、JavaScript引擎等场景,通过运行时优化实现接近原生代码的性能。这种"空间换时间"策略既保留了跨平台优势,又显著提升了执行效率,成为现代高性能虚拟机的关键技术。原创 2026-01-14 22:13:05 · 1425 阅读 · 0 评论 -
LLDB:现代化的开源调试器(LLVM Debugger)
已成为现代软件开发中不可或缺的调试工具。无论是简单的本地调试还是复杂的逆向工程,它都能提供灵活而高效的解决方案。对于开发者而言,掌握LLDB不仅能提升调试效率,还能深化对程序运行时行为的理解。的一部分,它被设计为高性能、可扩展,并且支持多种语言和平台。原创 2026-01-13 22:53:29 · 952 阅读 · 0 评论 -
GDB: GNU 调试器
它主要用于调试用 C、C++ 编写的程序,但也支持 Ada、Objective-C、Go、Rust、汇编等多种语言。对于调试段错误、内存泄露、多线程竞争等“硬核”问题,GDB 依然是无可替代的瑞士军刀。,是 GNU 开源项目的一部分,是 Linux/Unix 系统下最经典、最强大、使用最广泛的。,会打开一个文本用户界面,上方显示源代码,下方是命令窗口。客户端进行远程调试,这是嵌入式开发的标准流程。学习 GDB 不仅仅是学习一个工具,更是学习。让我们通过一个简单的例子来演示。,在强大的宿主机上运行。原创 2026-01-12 22:54:37 · 1512 阅读 · 0 评论 -
GCC 和 LLVM 各自的优缺点
GCC与LLVM编译器对比 GCC和LLVM是现代编译技术的两大主流框架。GCC作为历史悠久的编译器,在平台支持广泛性、稳定性和标准兼容性方面表现突出,特别适合嵌入式系统和专有软件开发。而LLVM凭借模块化架构、活跃的开源生态和卓越的工具链集成,成为新语言开发和现代IDE的首选。两者在主流平台的代码生成质量已相当接近,选择取决于具体需求:GCC更适合传统关键系统,LLVM则在新兴技术领域占据优势。这场技术竞争最终推动了整个编译器领域的进步。原创 2026-01-02 21:03:14 · 1596 阅读 · 0 评论 -
LLVM是什么?
LLVM是一个模块化的开源编译器框架和工具集,最初意为"低级虚拟机",现已演变为项目名称。其核心架构分为前端(如Clang)、中间表示(LLVM IR)和后端三部分,通过统一的IR实现语言与硬件的解耦。LLVM提供丰富的优化器和工具链(如lld、lldb),具有模块化、高性能优化、多语言支持等优势,广泛应用于Swift、Rust等语言编译,以及静态分析、JIT编译等领域。它改变了传统编译器开发模式,成为现代编译器技术的重要基础设施。原创 2026-01-02 20:35:34 · 1104 阅读 · 0 评论 -
C/C++ 中的 __asm volatile 函数
C/C++中的__asm volatile是GCC/Clang的内联汇编语法,用于在代码中直接嵌入汇编指令。volatile关键字确保编译器不优化这些指令,常用于硬件访问、内存屏障和系统调用等场景。其完整语法包括输入/输出操作数和寄存器约束,支持复杂的内存操作和寄存器管理。虽然功能强大,但内联汇编缺乏可移植性,不同编译器/架构语法差异大。现代开发应优先使用标准原子操作或编译器内置函数,仅在系统编程或性能优化等必要场景使用内联汇编。使用时需特别注意寄存器管理和副作用处理。原创 2026-01-01 23:25:01 · 845 阅读 · 0 评论 -
GCC是什么?
GCC(GNU Compiler Collection)是一个模块化设计的开源编译器系统,采用"前端-中端-后端"架构支持多种编程语言和目标平台。其编译流程包括预处理、中间代码生成(GIMPLE/RTL)、优化和代码生成等阶段,提供向量化、LTO、PGO等高级优化功能。GCC支持交叉编译、插件扩展,并包含丰富的诊断和安全特性,广泛应用于嵌入式开发、高性能计算等领域。作为自由软件运动的重要成果,GCC凭借其强大的优化能力和广泛的硬件支持,在编译器领域保持重要地位。原创 2026-01-01 23:20:19 · 1816 阅读 · 0 评论 -
位带操作(Bit-Banding)是什么?
位带操作(Bit-Banding)是ARM Cortex-M系列内核提供的高效内存访问技术,通过对位带别名区进行32位读写,实现对特定比特位的原子性操作。它将1MB位带区映射到32MB别名区,每个比特对应一个32位字地址,通过公式计算映射关系。该技术解决了传统"读-改-写"操作的非原子性、低效和代码繁琐问题,特别适用于外设寄存器操作和共享标志位管理。使用时需注意硬件支持范围、32位访问限制,通常通过宏定义简化地址计算。位带操作显著提升了嵌入式系统对硬件位操作的效率和可原创 2025-11-25 22:43:16 · 1301 阅读 · 0 评论 -
C++智能指针(Smart Pointer)是什么?
C++智能指针是管理动态内存的类对象,遵循RAII原则实现自动内存管理,解决传统裸指针的内存泄漏和悬空指针问题。C++11标准提供了三种主要智能指针:std::unique_ptr(独占所有权,禁止拷贝)、std::shared_ptr(共享所有权,引用计数)和std::weak_ptr(弱引用,解决循环引用)。最佳实践是优先使用unique_ptr,必要时用shared_ptr,并通过make_unique/make_shared创建。智能指针是现代C++内存管理的核心工具,能显著提高代码安全性和可维护性原创 2025-10-04 20:09:05 · 781 阅读 · 0 评论 -
内联汇编(Inline Assembly)是什么?
内联汇编(Inline Assembly)摘要(143字) 内联汇编是在C/C++等高级语言中直接嵌入汇编指令的技术,允许底层硬件操作与高级代码混合。其特点包括:提供对硬件的精细控制、实现高性能优化,但语法依赖特定编译器和CPU架构(如GCC用AT&T语法,MSVC用Intel语法)。主要应用于访问特殊指令集、关键代码优化及系统编程。使用时需注意可移植性差、错误风险高,并可能干扰编译器优化。现代开发中,推荐优先考虑编译器内置函数等替代方案,仅在必须使用特定处理器指令时采用内联汇编。原创 2025-08-18 19:00:00 · 1220 阅读 · 0 评论 -
(C/C++)内在函数(Intrinsic Functions)是什么?
内在函数(Intrinsic Functions)是编译器提供的特殊函数,可直接映射到硬件指令(如SIMD、CPU特殊操作),无需内联汇编即可实现高性能优化。其特点包括:硬件直接映射、编译器优化、跨平台兼容性(需不同头文件如<immintrin.h>或<arm_neon.h>)。 主要应用包括: SIMD并行计算(如AVX/NEON加速向量运算); 调用特殊CPU指令(如原子操作、时间戳读取); 嵌入式硬件访问(如ARM中断控制)。 对比内联汇编:内在函数可读性更高、维护成本原创 2025-08-18 17:30:00 · 1473 阅读 · 0 评论 -
C/C++中的位段/位域(Bit-field)是什么?
C/C++中的位段(Bit-field)是一种特殊的结构体成员,允许精确控制变量占用的位数而非整个字节。主要应用于内存受限环境或需要匹配硬件/协议格式的场景。位段通过指定成员类型和位数定义,如unsigned int flag:1。其内存布局由编译器决定,存在平台差异。宽度为0的位段强制换行分配单元,未命名位段可作占位。优点包括节省内存和提高代码可读性,但存在可移植性差、效率较低、无法取地址等缺点。建议仅在必要时使用,优先考虑显式位操作,使用时应避免依赖特定内存布局,并充分测试目标平台行为。原创 2025-06-17 23:01:41 · 1512 阅读 · 0 评论 -
什么函数不能声明为虚函数?
常见的不能声明为虚函数的有普通函数(非成员函数)、静态成员函数、内联成员函数、 构造函数和友元函数。以下将分别对这几种情况进行分析。原创 2024-04-01 21:54:35 · 486 阅读 · 0 评论
分享