- 博客(405)
- 收藏
- 关注
原创 C++之《程序员自我修养》读书总结(7)
《程序员自我修养》读书总结(七)探讨了动态链接的核心机制。静态链接会导致代码冗余和更新困难,而动态链接通过运行时符号解析实现资源共享。关键点包括:1)动态链接器在程序启动时加载共享对象并完成重定位;2)地址无关代码(PIC)通过相对寻址避免修改代码段;3)延迟绑定(PLT/GOT)机制将函数解析推迟到首次调用时,提升启动性能;4)ELF文件中.dynamic段保存依赖信息,.got和.plt段协作实现动态绑定。这些技术共同解决了静态链接的资源浪费问题,支持灵活的模块化架构。
2026-02-27 23:39:43
1054
19
原创 C++之《程序员自我修养》读书总结(6)
本文探讨了可执行文件与进程的关系,从程序装载到进程虚拟空间的构建过程。程序作为静态实体,通过操作系统映射为动态进程实例,一个程序可对应多个进程。现代系统采用页映射机制实现按需装载,利用虚拟内存技术提升内存利用率。文章分析了进程虚拟空间的布局原理,包括ELF文件的执行视图优化、段映射机制以及BSS段的零填充实现。通过操作系统视角,揭示了进程建立时的环境构建过程,包括页表初始化、按需调页等核心机制,展现了软硬件协同设计的精妙之处。
2026-02-27 23:34:34
419
2
原创 GCC编译(7)链接脚本LinkerScripts
本文介绍了GCC编译中的链接脚本(Linker Scripts)功能。链接脚本用于精确控制可执行文件的布局,定义代码、数据等内容的地址分布和加载策略。文章详细解析了链接脚本的基本概念、语法结构和常用命令。文章适用于需要精细控制内存布局的嵌入式开发场景,帮助开发者理解和使用链接脚本这一强大工具。
2026-02-25 23:37:12
777
18
原创 数据结构(2)常见概念
本文介绍了数据结构与算法的基本概念和核心原理。首先阐述了数据结构的本质是数据元素及其关系的集合,程序设计的核心在于选择合适的数据结构并设计高效算法。然后分析了顺序存储和链式存储两种物理结构的特点及适用场景。接着探讨了数据类型在程序设计中的约束作用,以及抽象数据类型(ADT)的重要性。最后详细讲解了算法的定义、特性,以及时间复杂度和空间复杂度的分析方法,强调复杂度评估对算法效率的关键影响。全文系统性地梳理了数据结构与算法的基础知识,为后续深入学习奠定了理论基础。
2026-02-25 23:32:01
703
1
原创 昨日故事(1)2026年2月24日
摘要: 本文讲述了一位年轻人从大学毕业到福州工作的四年心路历程。从初入职场的激情满怀,到经历工作倦怠、感情挫折和健康问题后的自我反思。作者通过健身、社交、工作挑战等途径实现自我救赎,最终学会与孤独和解,找到内心平静。文章记录了从迷茫焦虑到沉稳从容的成长蜕变,以及在病痛和工作压力中对生命意义的思考。这段漂泊经历让作者明白:真正的幸福源于自我认同而非外界认可,人生需要放下执念、专注当下,学会在独处中取悦自己。
2026-02-24 00:44:57
596
4
原创 C++之《程序员自我修养》读书总结(5)
《程序员自我修养》读书总结:Windows PE/COFF格式解析 本文深入探讨了Windows平台的核心二进制文件格式PE/COFF。主要内容包括: 发展历史:从Unix的COFF格式演变到Windows的PE格式,再到64位的PE32+扩展,保持兼容性的同时支持新特性。 mingw-w64工具链:介绍这套跨平台编译工具链的组成、用途和安装配置方法,支持在Linux/macOS上交叉编译Windows程序。 文件结构:详细解析PE文件的映像头和段表结构,包括_IMAGE_FILE_HEADER各字段含义,
2026-02-22 20:59:39
1576
4
原创 C++之《程序员自我修养》读书总结(4)
本文是《程序员自我修养》读书总结的第四部分,主要探讨静态链接的关键技术。内容包括空间和地址分配策略(相似段合并)、符号解析与重定位机制、COMMON块处理规则、C++特性支持(如模板实例化处理),以及静态库链接原理。文章详细分析了链接器如何通过两阶段处理(空间分配+符号解析)将分散目标文件组织为可执行映像,并深入讨论弱符号、函数级别链接、ABI兼容性等核心概念。通过具体示例和流程图,展现了从编译单元到最终二进制文件的转换过程。
2026-02-22 20:53:12
690
2
原创 GCC编译(6)静态库工具AR
本文介绍了GCC工具链中的AR(Archive)命令,主要用于创建、修改和提取静态库文件。文章概述了AR的基础使用场景,包括创建档案文件、查看内容、添加/删除成员等操作。重点解析了档案文件的本质特性:作为链接优化的二进制容器,其符号索引机制(armap)可显著提升链接效率。文章还对比了普通archive和thin archive的区别,前者完全拷贝对象文件适合发布,后者仅保存引用路径适合本地构建。最后详细列出了AR命令的参数说明和使用方法,帮助开发者高效管理静态库文件。
2026-02-20 11:40:46
1486
23
原创 GCC编译(5)头文件处理
本文主要介绍了GCC编译器处理头文件的相关技术和最佳实践。内容涵盖头文件预处理机制、编译规则、防止重复包含的方法、C/C++兼容性处理以及依赖关系生成等方面。重点讨论了预处理阶段宏展开和路径搜索策略,头文件定义与声明的规范使用,include guard和#pragma once的对比选择,跨语言接口设计中的extern "C"用法,以及构建系统中自动生成头文件依赖关系的技巧。文章通过具体示例和参数说明,为开发者提供了处理头文件相关问题的实用指导,有助于提高代码质量和构建效率。
2026-02-20 11:31:36
663
2
原创 GCC编译(4)构造和析构函数
本文探讨了GCC编译器中构造和析构函数的实现机制。从程序初始化视角分析了广义构造/析构过程,包括全局对象初始化、静态变量处理等。详细介绍了GCC特有的__attribute__((constructor))和__attribute__((destructor))属性,它们通过.init_array和.fini_array段实现函数自动调用。文章还解析了优先级控制、执行顺序等特性,并通过实例展示了从源码到ELF二进制文件的实现细节,包括符号表分析、段结构验证等,为理解程序启动和终止流程提供了技术参考。
2026-02-19 12:22:00
673
4
原创 GCC编译(3)常见编译选项
本文介绍了GCC编译器的常见编译选项及其功能。主要内容包括:基础控制选项(-c、-o、-E、-S、-v等)用于控制编译流程;优化选项(-O0~-O3、-Os、-flto等)调整编译优化级别;警告诊断选项(-Wall、-Wextra、-Werror等)提高代码质量;宏与头文件控制(-D、-I)影响预处理行为;链接选项(-L、-l、-static等)控制库链接方式;语言标准选项(-std)指定编译标准。文章还通过示例展示了各选项的具体应用场景,帮助开发者更高效地使用GCC进行代码构建和优化。
2026-02-19 11:48:10
979
14
原创 GCC编译(2)C语言交叉编译
文章摘要: 本文介绍了GCC交叉编译C语言程序的基本方法。首先通过简单的多文件编译示例展示了增量编译的优势,详细讲解了Makefile的编写规则,包括变量定义、模式匹配和伪目标的使用。然后重点阐述了ARM平台交叉编译环境的搭建,包括工具链选择、Ubuntu系统下的安装配置方法,以及32位和64位编译器的使用示例。最后简要说明了本地与远程服务器之间的文件传输方法,为跨平台开发提供了完整的工具链指导。文章适合Linux环境下进行C语言开发和交叉编译的初学者参考。
2026-02-14 23:54:40
635
2
原创 GCC编译(1)入门概述
本文概述了GCC编译器的发展历程、编译流程和主要组件。GCC最初作为GNU C Compiler,逐步发展为支持多语言的GNU Compiler Collection。其编译流程分为预处理、编译、汇编和链接四个阶段,每个阶段由不同工具完成。文章详细介绍了各阶段的功能和对应命令,并列举了GCC的主要组件及其作用,包括c++、g++、gcj等语言驱动程序和libgcc、libstdc++等核心库。GCC的分阶段设计和模块化架构使其成为Linux系统重要的构建工具。
2026-02-14 23:43:04
677
2
原创 C++之《程序员自我修养》读书总结(3)
本文节选自《程序员自我修养》读书总结第三部分,重点探讨目标文件格式及其核心概念。文章首先指出目标文件与可执行文件本质上是同一套二进制格式在不同阶段的表现形式,详细分析了ELF和PE文件的结构特点及其历史演进。通过实例展示了代码段、数据段和bss段的实际布局,揭示了编译器优化策略对空间利用的影响。最后通过size和objdump工具的实际输出,直观呈现了目标文件中各段的组织方式及其内存映射关系,为理解程序构建流程提供了技术基础。
2026-02-10 11:50:54
1197
25
原创 C++之《程序员自我修养》读书总结(2)
《程序员自我修养》读书总结(二):编译与链接的深层逻辑 本文深入解析了C程序从源码到可执行文件的完整构建过程。通过GCC编译的四个阶段(预处理、编译、汇编、链接),揭示了程序如何从"人类可读描述"转化为"操作系统可装载实体"。重点剖析了链接器的核心功能:地址空间分配、符号决议和重定位,解释了静态链接中启动文件、用户代码和标准库的交互机制。同时阐述了编译器工作的多阶段特性(词法分析→语法分析→语义分析→中间代码生成→目标代码生成),以及链接器在程序语义落地中的关键作用。
2026-02-10 10:53:39
656
7
原创 C++之《Effective C++》读书总结(4)
摘要: 本文探讨了《Effective C++》中模板与泛型编程的核心原则。首先分析了隐式接口与编译期多态的特性,对比了class显式接口的运行期多态差异。其次解析了typename在模板参数声明和嵌套从属类型中的双重作用。针对模板继承问题,提出了通过this->或基类限定符访问基类成员的方法。此外,建议抽离与模板参数无关的代码以减少膨胀,并通过成员函数模板实现类型兼容性,提升泛型设计的灵活性与安全性。这些技巧对于编写高效、可维护的C++模板代码至关重要。
2026-02-06 23:08:01
773
19
原创 C++之《程序员自我修养》读书总结(1)
《程序员自我修养》读书总结(一)深入探讨了程序从编译到运行的全过程。文章解析了编译器如何将高级语言转换为机器码,详细介绍了可执行文件的结构与组织方式,包括ELF格式的段布局和元数据。通过分析标准库的实现机制,解释了头文件包含与链接过程的区别。文章还对比了不同编译器、硬件平台和操作系统下的编译结果差异,并完整梳理了"Hello World"程序从装载到退出的执行流程,包括main函数前后的运行时初始化工作。最后探讨了无操作系统环境下运行程序所需的条件,展现了底层系统与程序运行的密切关系。
2026-02-06 23:01:55
661
3
原创 C++之《Effective C++》读书总结(3)
本文摘要总结了《Effective C++》第三部分关于实现优化的关键建议: 推迟变量定义:在首次使用时定义变量,避免不必要的构造/析构开销,同时提高代码可读性。建议定义时直接初始化而非先定义后赋值。 减少类型转换:避免使用C风格强制转换,优先使用语义明确的新式转换(static_cast等)。特别警惕dynamic_cast的性能开销和多态设计问题。 避免返回内部句柄:不要返回指向对象内部成员的指针/引用,以维护封装性,防止const语义破坏和悬空引用问题。 异常安全保证:确保代码在异常发生时至少满足基本
2026-02-03 22:26:55
1214
17
原创 C++之《Effective C++》读书总结(2)
在 C++ 中,“以对象管理资源”并不是一种语法技巧,而是一种资源生命周期与对象生命周期绑定的设计哲学。RAII(Resource Acquisition Is Initialization)的核心思想是:**资源一旦被成功获取,就必须立刻交由对象托管**。
2026-01-30 10:02:51
1202
19
原创 数据结构(1)整体认知与框架思维
从宏观视角看,数据结构并不是零散孤立的知识点,而是一套可以被高度抽象和统一理解的组织模型。在高层次上,几乎所有常见数据结构都可以归结为数组与链表两种基础形态。
2026-01-30 09:45:35
734
8
原创 C++之《Effective C++》读书总结(1)
**将 C++ 视为一个语言联邦(C、Object-Oriented C++、Template C++、STL)**,是《Effective C++》中极具洞察力的抽象。这种观点强调:C++ 并非单一范式语言,而是由多个相互重叠、规则各异的子语言共同构成。理解这一点,有助于开发者在不同语境下采用恰当的思维模型,避免因误用某一子语言的规则而引发隐蔽缺陷或性能问题。
2026-01-27 15:39:29
1851
20
原创 CS自学(5)代码训练
作为一名以 C/C++ 为主要工具的程序开发者,高效刷题的核心并不在于“做了多少题”,而在于是否形成稳定、可迁移的解题能力。结合算法学习中的认知规律与工程实践经验,基于遗忘曲线来规划刷题节奏,是一种兼顾效率与深度的可行路径。
2026-01-27 14:40:11
681
3
原创 VibeCoding(1)背景介绍
本文系统梳理了AI编程辅助技术的发展历程,将其划分为三个阶段:1)基于统计的自动补全阶段(2015-2020),主要使用N-gram和LSTM模型实现局部代码预测;2)生成式Copilot阶段(2021-2024),基于Transformer架构实现语义块级代码生成;3)Agentic和VibeCoding阶段(2024年起),AI发展为具备自主规划、执行和修正能力的开发代理。
2026-01-17 22:18:21
1400
6
原创 CC++八股文之内存泄漏
文章摘要:C/C++内存泄漏问题分析与定位 本文系统分析了C/C++程序中的内存泄漏问题。首先明确定义了内存泄漏的本质是"生命周期失配",即程序申请内存后失去释放控制权。文章详细划分了可能发生泄漏的内存区域(堆、文件映射段)和不会泄漏的区域(栈、只读段等)。通过三个阶段阐述了泄漏的危害:从进程内存缓慢增长到系统OOM崩溃。
2026-01-17 22:12:34
985
1
原创 CC++八股文之内存
本文深入探讨了C/C++中的内存管理核心概念。首先阐述了内存本质,指出内存作为连续字节数组的特性,以及地址空间和字节序等关键概念。接着详细分析了程序内存分区,包括代码区、全局/静态存储区、栈区、堆区和常量区的特点及作用。随后对比了指针与引用的区别,并解析了值传递、引用传递和指针传递三种参数传递方式的异同。最后介绍了C++特有的RAII(资源获取即初始化)技术,强调通过对象生命周期管理资源的重要性。这些基础知识对于理解C/C++内存机制和编写高效安全代码至关重要。
2026-01-14 21:54:41
944
1
原创 CC++八股文之面对对象(1)
本文摘要: C++面向对象编程三大特性:封装(隐藏实现细节)、继承(代码复用与扩展)和多态(接口统一实现多样)。对比面向过程与面向对象编程范式,分析各自适用场景。详细解析class与struct的关键区别:默认访问权限和继承方式不同。阐述类对象构造/析构顺序(基类→成员→派生类)及生命周期管理(栈/堆/静态对象)。重点讨论深拷贝(复制指针指向内容)与浅拷贝(仅复制指针地址)的区别及风险,强调析构函数不应抛出异常。全文涵盖C++核心语法要点,适合面试准备和知识梳理。
2026-01-11 20:59:41
903
2
原创 2025年度总结-CSDN
CSDN年度总结与展望 2025年CSDN创作回顾:全年发布92篇技术文章,粉丝达9400+,但未达预期目标。重点投入在操作系统基础、C++项目开发和LeetCode刷题,但学习深度不足。工作实践涵盖DevOps、CI/CD及C++大型项目开发。2026年计划聚焦内核源码、TCP/IP协议栈和DPDK性能优化,目标提升文章质量至100篇/年、粉丝2万+,并深入加密报文处理等网络方向。强调持之以恒的学习态度,补强基本功,避免浅尝辄止。
2026-01-03 20:37:47
659
原创 CC++八股文之基础语法(2)
C/C++基础语法摘要 本文介绍了C++匿名函数(Lambda表达式)、指针和右值引用的核心概念: 匿名函数:C++11引入的Lambda表达式语法,本质是编译器生成的闭包类。支持捕获上下文变量、内联定义函数对象,提升代码简洁性和性能。 指针:存储内存地址的变量,提供直接内存访问能力。关键特性包括动态内存管理、构建数据结构等,但也易引发野指针、内存泄漏等安全问题。 右值引用:C++11引入的"T&&"语法,用于绑定临时对象,实现移动语义和完美转发。
2025-12-25 21:59:49
1030
原创 CC++八股文之基础语法(1)
本文总结了C/C++编程中的五个关键语法点:volatile、static、const关键字的作用与区别,typedef和#define的差异,以及不同类型变量的特性。volatile确保变量从内存读取而非寄存器缓存;static根据上下文改变变量生命周期和作用域;const保证变量不可变性;typedef提供类型安全别名,而#define仅做文本替换。这些概念对理解底层编程、优化代码性能及确保程序正确性至关重要。
2025-12-25 21:56:48
804
原创 sphinx(3)RST语法
RST语法摘要 RST(reStructuredText)是一种轻量级标记语言,专为技术文档设计。它使用下划线标记标题,支持有序/无序列表、定义列表和字段列表。段落通过空行分隔,缩进段落形成引用样式。RST强调可读性和扩展性,适合复杂文档结构,是Python文档系统Sphinx的默认格式。其语法包括: 标题:使用下划线字符标记层级 段落:空行分隔,缩进形成引用 列表:支持有序(数字/字母)、无序(+-*)和定义列表 字段列表:冒号标记的键值对结构 RST比Markdown更适合技术文档,虽学习曲线稍陡但表现
2025-11-25 21:03:11
468
原创 sphinx(2)配置介绍
Sphinx(2)配置摘要 本文介绍了Sphinx文档生成器的核心配置项,主要包括项目信息和一般配置参数。项目信息配置包含project(项目名称)、author(作者)、copyright(版权)、version/release(版本号)等基础元数据。一般配置项详细列举了50多项参数,涵盖扩展模块、源文件处理、模板路径、代码高亮等各个方面。重点介绍了pygments_style代码高亮样式的配置,并列出sphinx、default、emacs等常用样式选项。这些配置项通过conf.py文件进行设置,能够灵
2025-11-18 20:44:11
703
原创 sphinx(1)基础使用
Sphinx是一个强大的文档生成工具,最初为Python文档需求而设计。它支持多种输出格式、结构化文档、代码文档自动化和国际化。安装简单,通过sphinx-quickstart生成基本结构,包含配置文件、源文件和构建目录。Sphinx基于reStructuredText编写文档,通过Makefile命令生成HTML、PDF等格式输出。其优势在于灵活扩展和自动化文档管理,适合技术项目文档开发。
2025-11-18 20:42:38
1116
原创 Linux之rsyslog(6)RainerScript
摘要:RainerScript基础语法与功能 RainerScript是rsyslog的核心配置语言,专用于处理网络事件和日志过滤。它支持复杂表达式(含算术、逻辑、字符串运算符),并分为内置函数(如cnum()、dyn_inc())和模块函数(需加载模块,如fmhttp)。控制结构包括if-else条件分支和foreach循环(仅遍历JSON数据),语法类似主流编程语言。无类型设计需注意隐式转换,如字符串拼接需用&而非+。典型应用包括日志分类、字段提取(如正则re_extract())和条件路由。
2025-11-14 13:22:14
972
原创 Linux之rsyslog(5)过滤条件
文章摘要:本文详细介绍了rsyslog的四种过滤条件类型:传统选择器(基于优先级和设备)、基于属性的过滤器(支持多种比较操作)、基于表达式的过滤器(支持复杂运算)以及BSD风格块(v7+版本不再支持)。重点讲解了选择器的设备-优先级语法和扩展功能,以及基于属性过滤器的contains、isequal等操作符的使用方法。文章还提供了配置示例,如通过msg属性过滤特定消息内容,并强调正则表达式和转义字符的处理注意事项。
2025-11-14 13:20:50
1325
原创 Linux之rsyslog(4)属性配置
摘要:本文详细介绍了rsyslog日志系统中的属性配置机制,包括消息属性和系统属性两大类。消息属性(如msg、hostname等)从原始日志中提取,用于模板和条件语句处理;系统属性(如$now、$myhostname等)由rsyslog核心提供,与时间相关的属性还区分本地和UTC版本。文章强调时间属性的使用注意事项,并列出完整的属性对照表,为日志格式化、过滤和转发提供灵活的数据访问方式。通过合理配置这些属性,可实现高效的日志管理需求。
2025-11-10 21:13:05
880
原创 Linux之rsyslog(3)模板配置
Linux rsyslog(3)模板配置摘要 本文详细介绍了rsyslog的字符串生成模块和模板系统。字符串生成模块通过本地C接口加速模板处理,提供约5%性能提升,内置smfile、smfwd等核心模块。 rsyslog模板用于定义数据输出格式,支持列表、子树、字符串和插件四种类型。列表模板适合JSON流水线,子树模板序列化完整JSON树,字符串模板处理简单文本。模板通过template()对象定义,可配合常量、属性语句使用。 文章还介绍了保留模板名称(如RSYSLOG_TraditionalFileFor
2025-11-05 22:41:37
731
原创 Linux之rsyslog(2)输入输出配置
Linux rsyslog(2)输入输出配置摘要 rsyslog是一个高度可扩展的日志处理框架,其工作流程分为输入模块接收、规则集处理和操作输出三个阶段。支持三种配置语法,推荐使用结构化的RainerScript格式。rsyslog提供丰富的输入/输出模块,包括文件(omfile)、网络(omfwd)、数据库(ommysql)等,满足不同场景需求。输入模块如imtcp、imudp负责接收日志,输出模块则处理日志存储和转发。配置时需注意规则集的绑定和过滤条件设置,实现灵活的日志处理流水线。(149字)
2025-11-03 20:47:55
662
原创 Linux错误(7)接口处于Down状态不通告IPv6地址变更事件
在linux 4.14内核版本上,接口处于Down状态时,IPv6地址操作不会触发netlink通告,会导致用户空间存在地址残留。接口处于DOWN时,接口IPv6地址会处于 tentative 状态,处于重复地址检测的试探状态,是一个临时状态。而内核在通告IPv6地址时,会判断地址的状态,tentative 状态地址不会被通告。
2025-10-29 22:04:16
904
2
原创 Linux(1)rsyslog(1)基础使用
摘要: rsyslog是Linux系统中高性能的开源日志处理工具,具有模块化架构、可靠传输和强大过滤能力。支持从传统syslog协议到现代数据库整合的多种功能。安装可通过apt/yum/dnf命令完成,配置保存在/etc/rsyslog.d/目录下。基础使用包括创建自定义日志规则、发送测试消息(logger命令)和验证结果(tail命令)。相比syslog-ng等替代方案,rsyslog在性能、兼容性和企业级部署方面更具优势,是Linux生态中广泛应用的日志管理解决方案。
2025-10-29 22:00:40
1093
1
Autotool Tutorial(epita.fr) - Autorools使用教程PDF文档
2023-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅