- 博客(89)
- 收藏
- 关注
原创 LeetCode——二分(进阶)
本文介绍了四道二分查找相关题目及其解法。1. 山脉数组峰顶索引:通过比较中点与左右元素,确定峰顶位置;2. 寻找峰值元素:利用数组二段性,比较中点与相邻元素;3. 旋转排序数组最小值:根据中点值与末尾值关系确定最小值位置;4. 缺失学号:通过下标与值比较定位缺失位置。所有题目均采用二分法实现O(log n)时间复杂度,关键在于识别数组的二段性特征。
2025-10-21 21:19:41
2307
原创 LeetCode——二分(初阶)
文章摘要 二分算法是一种高效的分治算法,广泛应用于算法题目和工程实践中,如数据库索引、文件系统和游戏AI路径规划。常见的二分算法包括二分答案、二分区间和二分浮点数。二分答案用于在单调区间查找特定值;二分区间用于查找满足条件的区间;二分浮点数则处理浮点数值的查找问题。 两个典型例题展示了二分算法的应用: 二分查找:在有序数组中查找目标值,通过不断缩小搜索范围(调整左右指针)实现O(log n)时间复杂度的查找。 在排序数组中查找元素的第一个和最后一个位置:通过两次二分查找分别确定目标值的左右边界,需注意取整方
2025-10-20 22:26:57
9551
原创 LeetCode——滑动窗口(进阶)
文章摘要 本文介绍了三道滑动窗口相关算法题的解法: 904. 水果成篮:通过哈希表维护窗口内水果种类不超过2的区间,使用双指针实现滑动窗口,时间复杂度O(n)。 438. 找到字符串中所有字母异位词:比较子串和父串的字符频率哈希值,维护一个固定长度的滑动窗口,统计满足条件的起始索引。 串联所有单词的子串:利用单词长度固定的特性,通过哈希表统计单词出现频率,使用滑动窗口检查所有可能的串联组合。 这些题目展示了滑动窗口在字符串和数组处理中的典型应用,关键点在于合理维护窗口边界条件和利用哈希表优化频率统计。
2025-10-17 14:57:05
9173
原创 VLAN 间单臂路由配置(头歌)
这是一篇关于计算机网络实验的指导文档,主要包含五个实验关卡:拓扑图搭建、access口配置、trunk口配置、路由器子接口配置和PC机IP地址配置。文档提供了参考实现方法,包括上传文件路径、终端命令操作等。同时给出了多个资源获取渠道:博客链接、百度网盘(提取码xu2z)、码云仓库和夸克网盘链接,方便读者下载相关实验资料。该文档适合计算机网络学习者参考使用。
2025-10-15 21:44:10
9681
4
原创 LeetCode——滑动窗口(初阶)
滑动窗口算法是一种高效处理数组/字符串问题的技巧,适用于寻找满足特定条件的子数组或子字符串。其核心思想是维护一个可变或固定大小的窗口,通过移动窗口边界来扫描数据结构。基本步骤包括:进窗口、条件判断、更新结果和出窗口。 典型例题解析: 长度最小的子数组:寻找和≥target的最短连续子数组,通过滑动窗口在O(n)时间内解决。 无重复字符的最长子串:使用哈希表辅助,维护不含重复字符的窗口,实时更新最大长度。 最大连续1的个数III:转化为求最多含k个0的最长1序列,通过统计0的个数控制窗口滑动。 将x减到0的最
2025-10-15 20:56:36
1644
4
原创 LeetCode——双指针(进阶)
文章摘要: 本文介绍了4道双指针相关的算法题目及解法。主要内容包括: 快乐数判断:通过快慢指针检测循环或到达1的情况 盛水容器问题:使用双指针从两端向中间移动的贪心策略 有效三角形个数:先排序再固定最大值,用双指针统计合法组合 查找价格和为目标的商品(示例未完整):通过双指针在有序数组中查找目标 这些题目展示了双指针在解决数组和数值问题中的典型应用,包括循环检测、贪心优化、组合统计等场景。解题关键在于合理设计指针移动条件,将时间复杂度优化到O(n)或O(nlogn)。
2025-10-13 21:23:03
8710
12
原创 LeetCode——双指针(初阶)
本文介绍了双指针算法的两种常见类型:对撞指针和快慢指针,并通过LeetCode例题《移动零》和《复写零》展示了双指针的实际应用。对撞指针用于从序列两端向中间移动,常用于顺序结构;快慢指针则用于处理环形结构或需要不同移动速度的场景。文章详细讲解了每种算法的实现思路,并提供了多个版本的代码实现,帮助读者理解双指针算法的灵活运用。通过具体示例,展示了如何用双指针高效解决数组操作问题,如移动零元素和复写零元素。
2025-10-11 21:40:02
2023
13
原创 C++进阶(9)——智能指针的使用及其原理
本文探讨了智能指针的使用场景及实现原理。文章首先通过一个除零异常导致内存泄漏的例子,说明智能指针的必要性。随后介绍了RAII设计原则和智能指针的基本实现思路,包括auto_ptr、unique_ptr和shared_ptr三种主要类型,重点分析了shared_ptr的引用计数机制及其循环引用问题,并提出了weak_ptr的解决方案。文章还讨论了智能指针的线程安全问题和定制删除器功能,最后简要说明了C++11智能指针与Boost库的关系。
2025-10-07 20:39:16
1997
9
原创 C++进阶(7)——包装器
本文介绍了C++中的两个重要包装器:function和bind。 function包装器: 是一个类模板,可以包装存储各种可调用对象(函数指针、仿函数、lambda表达式等) 通过统一包装可调用对象,可以减少模板实例化次数 应用场景包括简化代码(如逆波兰表达式求值)和增加灵活性 bind包装器: 是一个函数模板,用于调整可调用对象的参数 主要功能: 固定某些参数值 调整参数顺序 绑定成员函数时需要传入对象实例 通过placeholders指定参数位置 两者配合使用可以提高代码的灵活性和可维护性。functi
2025-10-05 21:00:56
1937
22
原创 C++进阶(8)——异常
C++异常处理机制通过try、catch和throw关键字实现错误检测与处理的分离。try块包裹可能出错的代码,throw抛出异常对象,catch捕获并处理异常。异常处理遵循栈展开规则,沿着调用链查找匹配的catch子句。文中详细介绍了异常匹配规则、栈展开过程、异常安全等核心概念,并提供了多个代码示例(如除零异常、服务器模块异常处理等)。特别强调了通过继承std::exception创建自定义异常类,以及在main函数中统一捕获基类异常的重要性。此外,还讲解了重新抛出异常、异常规范(noexcept)以及标
2025-10-05 20:58:00
4028
8
原创 C++进阶(6)——lambda表达式
本文介绍了C++中lambda表达式的基本概念、语法规则、实现原理及具体应用。lambda表达式是一种匿名函数对象,可定义在函数内部,支持值/引用捕捉上下文变量。其语法包含捕捉列表、参数列表、返回类型和函数体。捕捉方式包括显式/隐式捕捉及混合捕捉,需注意作用域限制和const修饰特性。lambda底层通过编译器生成唯一类名的仿函数实现,其参数、返回值和函数体对应仿函数的operator()成员。实际应用中,lambda常用于替代函数指针和仿函数,如实现比较器等场景,具有更好的可读性和便捷性。通过反汇编验证了
2025-10-04 17:27:49
2423
12
原创 C++进阶(5)——可变参数模板
摘要:本文介绍了C++中可变参数模板的基本概念和使用方法,重点分析了参数包的扩展方式及实现原理。文章详细讲解了可变参数模板的语法结构、参数包展开的递归模式,并通过示例代码演示了不同参数情况下的处理方法。同时,文章深入探讨了STL容器中emplace系列接口的特点、使用方式及其实现原理,对比了emplace与push/insert系列接口的差异,指出emplace通过直接构造对象的方式减少拷贝操作,从而提升效率。最后强调了emplace接口在支持参数包传递方面的优势。
2025-10-04 11:35:00
3903
15
原创 C++进阶(4)——C++11右值引用和移动语义
本文介绍了C++11中引入的右值引用概念及其应用。主要内容包括: 左值与右值的概念区分:左值是有持久状态的内存对象,右值是临时值或字面量 左值引用和右值引用的语法区别及使用场景 移动语义的实现:通过移动构造函数和移动赋值运算符"窃取"右值资源 完美转发的实现原理:利用引用折叠和forward模板保持参数原始值类别 STL容器对移动语义的支持及实际应用场景 文章通过代码示例详细说明了右值引用如何提高程序性能,特别是在处理临时对象和深拷贝对象时的优势。
2025-10-03 21:43:35
4681
5
原创 C++进阶(3)——C++11基础
C++11是C++语言的重要更新版本,于2011年发布,引入了多项关键改进。文章主要介绍了C++11的新特性:1. 列表初始化统一了初始化语法,支持内置类型和自定义类型;2. initializer_list类简化了容器初始化;3. auto和decltype实现了类型自动推导;4. nullptr解决了空指针歧义问题;5. 范围for循环简化了容器遍历。此外还介绍了新增容器(array、forward_list等)和字符串转换函数(to_string/stoi等)。
2025-10-03 14:40:09
2215
15
原创 C++进阶(2)——多态
文章摘要:本文详细讲解了C++多态的实现原理,重点分析了运行时多态(动态多态)的实现机制。通过虚函数、虚函数表等概念,阐述了继承体系下派生类对象调用同一函数产生不同行为的原理。文章对比了重载、重写和隐藏的区别,介绍了override和final关键字的使用,并探讨了虚函数表在单继承、多继承及菱形继承情况下的分布规律。最后通过内存地址验证了虚函数表通常存放在代码段的特性。本文包含大量代码示例和测试结果,帮助读者深入理解C++多态的实现细节。
2025-09-29 20:13:11
1739
9
原创 C++进阶(1)——继承
本文系统介绍了C++中的继承机制,主要内容包括: 继承的基本概念和语法,通过学生/教师示例展示派生类继承基类成员的过程; 继承方式对访问权限的影响,详细说明public/protected/private继承的差异; 继承中的特殊处理:默认成员函数、作用域隐藏规则、友元关系、静态成员特性; 多继承与菱形继承问题,重点讲解虚拟继承解决二义性和数据冗余的原理; 继承(is-a)与组合(has-a)的对比分析,指出组合在代码维护性和耦合度上的优势。文章通过大量代码示例和内存布局分析,全面阐述了继承机制的实现原理和
2025-09-27 15:54:06
8246
12
原创 C++基础(22)——模板的进阶
文章摘要: 本文深入探讨了模板编程中的非类型模板参数和模板特化两大核心概念。非类型模板参数允许使用常量作为模板参数,只能在编译阶段确定,且仅支持整数类型。模板特化分为函数模板特化和类模板特化,其中类模板特化又细分为全特化(所有参数确定)和偏特化(部分特化或参数限制)。文章还分析了模板分离编译的常见问题及两种解决方案:将声明定义放在同一文件或使用显示实例化。最后总结了模板编程的优势(代码复用、灵活性)和缺点(代码膨胀、错误信息混乱)。
2025-09-25 21:36:15
1209
5
原创 C++基础(21)——内存管理
本文介绍了C/C++中的内存管理机制,包括内存分布、动态内存管理方式及常见面试题。主要内容包括:C语言使用malloc/calloc/realloc/free进行动态内存管理,C++则通过new/delete操作符实现更高效的内存管理,尤其针对自定义类型会自动调用构造/析构函数。文章详细解析了operator new/delete的底层实现原理,并介绍了定位new表达式的使用场景。最后总结了malloc/free与new/delete的区别,分析了内存泄漏的危害及解决方案。本文对理解C++内存管理机制和应对
2025-09-25 16:15:03
1093
5
原创 C++基础(20)——位图的模拟实现
本文介绍了bitset类的接口函数实现。主要内容包括:构造函数初始化bitset并分配存储空间;基本操作函数set、reset、flip、test的实现原理及代码;统计函数size和count的实现方法;以及判断函数any、none、all的逻辑实现。文章详细说明了每个函数的具体实现步骤,包括位运算操作、容器遍历等关键点,并配有图示说明位操作过程。这些实现基于vector<unsigned int>存储,通过位运算高效完成各种位操作功能。
2025-09-24 17:01:59
1141
4
原创 C++基础(19)——位图的介绍和使用
本文介绍了C++中bitset容器的概念和使用方法。bitset是一种高效的位图数据结构,可用于处理大规模数据的查找、去重等场景。文章详细讲解了bitset的三种定义方式、常用成员函数(如size()、count()、set()等)以及各种运算符的重载使用,包括移位运算符、关系运算符、赋值运算符和位运算符等。通过代码示例展示了bitset的基本操作,如位设置、翻转、转换等,并说明了其在节省内存空间方面的优势(相比传统存储方式可大幅减少内存占用)。bitset适用于大数据查找、布隆过滤器、集合运算等多种场景。
2025-09-24 12:07:52
1874
9
原创 数据结构初阶——AVL树的实现(C++)
摘要:AVL树是一种自平衡二叉搜索树,通过平衡因子限制确保树高在对数级别,保证插入、删除和查找操作的高效性。文章详细介绍了AVL树的基本规则、节点设计、插入操作(包括四种旋转调整情况)、删除操作的实现步骤,以及验证、查找和修改功能的方法。核心内容包括平衡因子的更新规则、单旋和双旋操作的具体实现,并通过代码示例展示了AVL树的关键操作流程。AVL树通过严格的平衡机制解决了普通二叉搜索树在极端情况下退化为链表的问题。
2025-09-23 22:08:17
3160
16
原创 C++基础(18)——使用哈希表封装unordered_map和unordered_set
本文详细介绍了哈希表的实现原理和代码实现,主要包括以下内容: 哈希表数据结构设计: 采用开散列方式实现哈希表 使用vector存储哈希节点指针 包含插入、查找、删除等基本操作 关键实现细节: 模板参数控制,支持unordered_map和unordered_set 哈希函数设计,特别处理string类型 迭代器实现,包括++操作符重载 负载因子控制和动态扩容机制 完整代码实现: 哈希表主体代码 迭代器实现 unordered_map封装 unordered_set封装 文章提供了完整的C++实现代码
2025-09-21 19:44:38
6937
6
原创 数据结构初阶——哈希表的实现(C++)
哈希表是一种高效的数据结构,通过哈希函数将关键码映射到存储位置。文章详细介绍了哈希冲突的两种解决方法:闭散列(开放地址法)和开散列(链地址法)。闭散列采用线性探测或二次探测解决冲突,而开散列通过链表连接冲突元素。文中还提供了两种方法的实现代码,包括插入、查找和删除操作。特别指出扩容时应选择素数作为表大小以减少冲突,并给出了素数扩容的实现方案。最后通过实验数据对比,验证了素数表大小在减少哈希冲突方面的优势。
2025-09-20 16:22:51
2583
15
原创 C++基础(17)——unordered_set和unordered_map的使用详解
本文介绍了C++11标准中的unordered关联容器,包括unordered_set、unordered_multiset、unordered_map和unordered_multimap。这些容器基于哈希表实现,查询时间复杂度为O(1),比基于红黑树的set和map效率更高。文章详细说明了各容器的定义方式、常用接口及使用方法,并通过示例代码展示了插入、删除、查找等操作。其中,unordered_set和unordered_map要求键唯一,而unordered_multiset和unordered_mu
2025-09-18 20:27:27
1112
17
原创 C++基础(16)——用红黑树封装出map和set
本文摘要: 本文详细介绍了红黑树及其在STL容器set和map中的实现。主要内容包括:1) 红黑树节点的模板参数设计,通过K和T参数区分set和map的数据存储方式;2) 引入仿函数机制解决不同类型节点Key值的比较问题;3) 实现红黑树的正向迭代器,包括++/--操作的中序遍历逻辑;4) 基于红黑树完成set和map的封装实现,重点处理了map的operator[]接口。文章提供了完整的红黑树源码实现,展示了如何通过模板参数和仿函数技巧实现一个通用的红黑树容器,最终构建出STL风格的set和map容器。
2025-09-18 12:14:19
1677
9
原创 数据结构初阶——红黑树的实现(C++)
红黑树是一种近似平衡的二叉搜索树,通过红黑节点和特定规则维持平衡。其核心性质包括:根节点为黑色、红色节点的子节点必须为黑色、从任一节点到叶节点的路径包含相同数量黑色节点。实现时默认新节点为红色,插入后通过变色和旋转(单旋或双旋)调整平衡。与严格平衡的AVL树相比,红黑树牺牲部分平衡性换取更高效的插入删除操作,实际应用更广泛。验证红黑树需检查二叉搜索树性质及红黑特性。红黑树整体实现包含节点定义、插入、旋转、查找等操作,复杂度为O(logN)。
2025-09-17 21:34:12
1976
3
原创 C++基础(15)——关联式容器的使用和介绍(set和map)
本文介绍了C++ STL中的关联式容器,重点讲解了set和map两大类容器及其变体(multiset/multimap)。关联式容器通过键值对存储数据,提供高效查找功能。文章详细阐述了set的基本概念和使用方法,包括插入、删除、查找等操作,并对比了set与multiset的区别(是否允许键值重复)。对于map容器,重点介绍了键值对的定义、插入方式(匿名对象和make_pair)、查找删除操作以及[]运算符的特殊用法。最后简要说明了multimap的特点及其与map的区别。文章通过具体代码示例展示了各类容器的
2025-09-17 12:01:11
7400
9
原创 C++基础(14)—— priority_queue的使用和模拟实现
本文介绍了优先级队列(堆)的使用及其模拟实现。优先级队列本质是通过vector容器封装,利用堆算法维护元素优先级顺序。文章详细讲解了priority_queue的三种定义方式(大根堆、小根堆、默认方式),并展示了基本操作函数(push、pop、top等)的使用示例。重点分析了堆的两个核心算法:向上调整(插入元素时维护堆结构)和向下调整(删除元素时维护堆结构),通过图示和代码说明了算法流程。最后给出了priority_queue的完整模拟实现代码,包括比较器定义和关键成员函数实现。
2025-09-16 15:16:11
8719
原创 C++基础(14)——stack和queue类的使用和模拟实现
本文介绍了如何基于双端队列(deque)实现栈(stack)和队列(queue)这两种容器适配器。通过模板类封装,栈使用deque的push_back()、pop_back()等操作实现其LIFO特性,队列则利用push_back()和pop_front()实现FIFO特性。两种结构都提供了基本的元素操作接口(如push/pop)、访问方法(top/front/back)以及容量查询(size/empty)。文章展示了完整的C++模板类实现代码,说明STL中这些适配器实际上是基于底层容器(默认为deque)
2025-09-16 09:48:15
8663
原创 C++基础(13)——list类的模拟实现
本文摘要:本文详细介绍了如何模拟实现一个C++ STL中的list容器。主要内容包括:1. 节点结构体list_node的实现,包含数据成员和前驱/后继指针;2. 迭代器结构体list_iterator的实现,通过运算符重载实现对链表节点的访问和遍历;3. list类的主要功能实现,包括构造函数、析构函数、拷贝控制函数、迭代器相关函数以及插入删除等操作。特别强调了带头双向循环链表的结构特点,以及如何通过封装节点指针来实现迭代器功能。实现过程中充分考虑了代码复用和效率优化,如利用insert/erase实现p
2025-09-15 20:17:57
1231
1
原创 C语言柔性数组详解与应用
柔性数组是C99标准引入的特性,指结构体中最后一个未指明大小的数组成员(如int data[]或int data[0])。其特点包括:大小运行时动态确定;sizeof不计算其大小;必须位于结构体末尾且前面有其他成员。使用场景是需要动态调整数组大小时,通过malloc/realloc分配连续内存空间。相比指针实现的动态数组,柔性数组优势在于:1)内存释放只需一次操作;2)数据存储连续,减少内存碎片,利用CPU缓存局部性原理提高访问速度。它提供了更灵活高效的内存管理方式。
2025-09-14 21:47:28
6066
原创 字符串操作函数(strcpy, strcat, strcmp)
本文介绍了C语言中常用的字符串操作函数及其模拟实现:1. strcpy函数用于字符串拷贝,将源字符串(包括\0)复制到目标空间,需确保目标空间足够大且可变;2. strcat函数实现字符串追加,将源字符串拼接到目标字符串末尾;3. strcmp函数比较两个字符串的ASCII值大小。文章还介绍了这三个函数的安全版本:strncpy(可限制拷贝字符数)、strncat(可限制追加字符数)和strncmp(可限制比较字符数),每个函数都通过示例代码演示了具体用法和注意事项。最后提供了各函数的模拟实现代码,强调了对
2025-09-13 20:06:57
2932
原创 字符串相关函数(strlen, strstr, strtok, strerror)
本文介绍了四个C语言字符串处理函数及其实现方法: strlen函数用于获取字符串长度,介绍了三种实现方式(计数器、递归、偏移量); strstr函数用于查找子串,详细说明了其参数含义并给出了模拟实现; strtok函数用于字符串分割,解释了其工作原理和使用注意事项; strerror和perror函数用于错误报告,对比了两者的功能差异。每个函数都配有示例代码和效果说明,重点强调了使用时的关键细节。
2025-09-13 16:19:27
3539
原创 C语言中的内存函数(memcpy, memmove, memcmp, memset)
这篇技术文章介绍了C语言中四种常用的内存操作函数:memcpy(内存拷贝)、memmove(可处理重叠区域的内存拷贝)、memcmp(内存比较)和memset(内存设置)。文章详细说明了每个函数的声明格式、参数含义和使用场景,并通过具体代码示例演示了它们的应用。特别对比了memcpy和memmove在处理内存重叠区域时的差异,强调了memmove的安全优势。最后还提供了memcpy和memmove的模拟实现代码,帮助读者深入理解这些内存操作函数的底层原理。这些函数在C语言程序开发中具有重要作用,掌握它们能有
2025-09-12 17:25:39
1141
原创 Linux(17)——Linux进程信号(下)
本文主要介绍了Linux系统中信号的保存、阻塞和捕捉机制。首先解释了信号递达(Delivery)和未决(Pending)的概念,以及信号在内核中的表示方式,包括block位图、pending位图和handler函数指针数组。接着详细介绍了sigset_t信号集类型及其操作函数,如sigemptyset、sigaddset等,以及sigprocmask函数用于修改信号屏蔽字。在信号捕捉部分,阐述了用户态和内核态的切换过程,以及内核如何捕捉和处理信号,特别是自定义信号处理函数的执行流程。最后介绍了sigacti
2025-08-07 21:02:21
7698
15
原创 Linux(17)——Linux进程信号(上)
本文系统介绍了信号的概念、产生方式及处理机制。文章首先通过快递的生活化比喻说明信号的异步特性,包括识别、接收和处理过程。在技术层面,详细讲解了信号的记录方式(32位位图)、分类(普通信号和实时信号)以及默认处理行为(终止、核心转储等)。重点阐述了信号的多种产生方式:终端组合键(如Ctrl+C产生2号信号)、系统调用(kill、raise、abort等函数)、软件条件(如SIGPIPE、SIGALRM)和硬件异常(如除零错误触发SIGFPE、野指针访问触发SIGSEGV)。文章还深入分析了核心转储机制及其在调
2025-08-06 20:16:54
1061
15
原创 Linux(16)——进程间通信(下)
SystemV进程间通信机制详解 SystemV提供了三种进程间通信方式:共享内存、消息队列和信号量。共享内存通过将物理内存映射到多个进程的虚拟地址空间实现高效数据共享,但需要额外同步机制。消息队列采用队列结构存储带类型的数据块,实现有序通信。信号量则用于进程同步和互斥控制,通过P/V操作保护临界资源。这三种机制的生命周期都随内核而非进程,需要显式释放。共享内存是最高效的IPC方式,仅需两次数据拷贝,而管道需要四次。所有SystemV IPC资源都使用ipc_perm结构作为公共头部,便于内核统一管理。实际
2025-08-05 17:20:18
7736
2
原创 Linux(15)——进程间通信(上)
管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。我们之前在谈Linux的命令的时候也提及了管道这一概念:例如,这个查看当前服务器有多少用户登录的命令我们发现这个命令是由who命令和wc命令组成的,这个命令运行起来之后就变成了两个进程了,who进程把执行得到的结果通过标准输出写入到了管道之中,wc进程通过标准输入从管道中读取数据,处理完之后再把结果通过标准输出给到用户。who显示的是相关信息,wc -l命令是用来统计行数的。
2025-08-01 21:37:55
8301
4
原创 Linux(14)——库的制作与原理
本文介绍了C语言中静态库和动态库的概念、生成过程及使用方法。静态库(.a/.lib)和动态库(.so/.dll)是两种常见的库文件形式,静态库在编译时被完整链接到程序中,而动态库则在运行时加载。文章详细讲解了如何通过gcc和ar命令生成这两种库文件,并演示了三种使用动态库的方法:拷贝到系统库目录、设置LD_LIBRARY_PATH环境变量以及配置/etc/ld.so.conf.d/路径。同时还比较了静态链接和动态链接程序的文件大小差异,并解释了-fPIC选项在生成位置无关代码中的作用。通过具体的示例代码和M
2025-06-07 23:34:52
11304
1
原创 Linux(13)——Ext系列文件系统
本文介绍了磁盘的基本结构与文件系统的关联。磁盘以扇区为基本单位,通过CHS(柱面、磁头、扇区)和LBA(逻辑块地址)实现寻址,现代操作系统通过块(如4KB)进行管理。为简化管理,大磁盘被划分为多个分区,分区再细分为块组。ext2文件系统通过超级块、块组描述符、inode表等结构维护文件元数据和数据内容。文件的元信息由inode保存。软链接是独立文件,保存目标路径;硬链接共享inode,相当于同一文件的多个名称。
2025-06-07 23:31:47
1432
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅