自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 收藏
  • 关注

原创 [优选算法专题八.分治-归并 ——NO.49 翻转对]

题目链接493.翻转对解析 本题通过归并排序的分治策略统计数组中满足nums[i]>2*nums[j]且i<j的翻转对数量。核心解法分为三部分: 主函数处理边界条件并初始化辅助数组 分治函数递归统计子数组内部及跨数组的翻转对 合并函数实现有序数组合并 关键点在于利用归并排序过程中子数组有序的特性,使用双指针法在线性时间内统计跨数组翻转对。时间复杂度O(nlogn),空间复杂度O(n)。 典型输入[1,3,2,3,1]输出2,对应数对(3,1)和(3,1)。该解法可扩展至其他逆序对统计场景,只需修

2025-11-24 18:45:45 136

原创 [优选算法专题八.分治-归并 ——NO.46~48 归并排序 、数组中的逆序对、计算右侧小于当前元素的个数]

本文分析了三个基于归并排序的算法题解:1) 排序数组,通过分治递归和合并操作实现O(nlogn)排序;2) 逆序对统计,在合并过程中计算跨子数组的逆序对数量;3) 右侧较小元素计数,利用元素索引在归并时统计右侧更小元素个数。三个解法都采用分治思想,在合并阶段完成核心操作,具有O(nlogn)时间复杂度和O(n)空间复杂度的共同特点,展现了归并排序在解决相关统计问题上的高效性和灵活性。

2025-11-24 18:00:04 504

原创 [Linux网络——Lesson3.『简易TCP网络程序』]

本文系统介绍了基于TCP协议的网络程序开发全流程,重点讲解了字符串回响程序的实现、并发优化方案及工程化部署方法。主要内容包括: 基础TCP通信实现 详细解析服务器初始化(socket-bind-listen)和客户端连接流程 通过文件读写接口实现网络通信 采用回调机制实现业务逻辑解耦 并发模型优化 多进程版:通过fork创建子进程处理请求,父进程专注连接 多线程版:原生线程库实现请求分发 线程池优化:预创建线程处理短任务,提高资源利用率 辅助功能增强 日志系统:实现分级日志输出和持久化存储 守护进程:通过s

2025-11-21 12:08:34 911

原创 [优选算法专题七.分治-快排 ——NO.42~45最小的K个数]

该代码实现了一个高效算法,用于从库存数组中找到最小的cnt个元素。核心采用快速选择算法和三路划分策略,通过随机选取基准值优化时间复杂度至期望O(n)。主函数处理边界条件后调用快速选择核心,将最小元素移至数组前端。三路划分将数组分为小于、等于和大于基准值的区域,根据分区结果仅递归处理必要区间,避免完全排序。算法原地操作,空间复杂度为O(logn)。适用于需要快速获取最小元素而不修改原数组顺序的场景,若需保留原数组应传入副本。

2025-11-20 22:18:00 912

原创 [Linux——Lesson27.线程:线程池]

本文介绍了线程池的概念、实现及优化过程。首先阐述了线程池的池化技术原理,通过预先创建线程提高效率,并分析了线程池在Web服务器、游戏服务器等场景的应用优势。然后详细讲解了线程池的四种实现版本:从基础功能实现(V1)、引入封装线程库(V2)、优化任务队列和锁机制(V3),到最终采用单例模式确保唯一性(V4)。重点探讨了单例模式的饿汉与懒汉实现方式,特别说明了多线程环境下懒汉模式的双检查加锁机制。最后补充了STL容器和智能指针的线程安全问题,指出STL容器非线程安全而shared_ptr通过原子操作保证线程安全

2025-11-20 21:27:40 773

原创 2025-11-20[归并排序、快乐数]

摘要1:归并排序算法实现 该代码实现了归并排序算法,采用分治策略对整数数组进行升序排序。主函数MySort处理边界条件并初始化辅助数组,mergeSort函数递归地将数组分解为最小单元,merge函数合并有序子数组。算法时间复杂度稳定为O(nlogn),空间复杂度O(n),具有稳定性。通过辅助数组优化避免了频繁创建销毁,中点计算采用防溢出方式。可扩展为降序排序或支持其他数据类型。 摘要2:快乐数判断算法 该代码实现了快乐数判断功能,通过计算数字各位平方和迭代,检测是否能收敛到1。getSum函数计算平方和,

2025-11-20 20:01:41 685

原创 [Linux网络——Lesson2.socket套接字 && 简易UDP网络程序]

本文系统介绍了基于UDP协议的Linux网络编程技术,主要内容包括: 基础理论部分 详细讲解了IP地址和端口号的概念及其在网络通信中的作用 阐述了传输层协议的特点,比较TCP与UDP的差异 解释了网络字节序及其转换方法 核心API部分 介绍了socket套接字相关API的使用 分析了sockaddr结构体的设计原理和派生结构体 实战开发部分 通过三个递进案例展示了UDP开发: 字符串回响服务器搭建基础通信框架 大写转小写实现业务函数解耦 多人聊天室应用生产者消费者模型、环形队列和多线程技术 开发经验总结 强

2025-11-19 11:31:01 699

原创 [Linux网络——Lesson1.初识计算机网络]

本文摘要:文章系统梳理了计算机网络的核心知识体系,从网络发展历史切入,重点解析了网络协议的分层设计原理(OSI七层模型与TCP/IP五层模型)。通过类比快递物流形象阐释了协议报头和数据封装/分用机制,详细说明了局域网通信原理及跨网络传输流程。文章深入剖析了IP地址(逻辑定位)与MAC地址(物理标识)的协同工作机制,并阐述了操作系统在网络协议栈实现中的关键作用。核心逻辑围绕"协议规则-分层架构-系统支撑-地址标识-数据封装"的技术闭环展开,为理解现代网络通信提供了系统化的知识框架。

2025-11-16 22:58:50 956

原创 [Linux——Lesson26.线程:线程安全及其他理论]

本文系统梳理了多线程编程中的核心线程安全问题,涵盖死锁、C++组件安全性、锁机制、设计模式及经典并发模型。首先解析死锁概念及四种解决方案,强调破坏死锁必要条件的关键性。针对C++组件,指出STL容器默认非线程安全需外部加锁,智能指针中shared_ptr仅保证引用计数安全。重点剖析单例模式的线程安全实现,详细讲解双重检查锁定机制及其优化方案。此外,对比分析了自旋锁与互斥锁的适用场景,深入探讨读者写者问题的"3-2-1"原则及两种优先策略的权衡。全文贯穿"风险识别-工具选择-模式

2025-11-15 14:35:36 904

原创 [优选算法专题七.分治-快排 ——NO.42~44 颜色分类、排序数组、数组中的第K个最大元素]

本文解析了三道经典排序问题:1. 颜色分类(75题)采用双指针法将0、1、2分区处理,时间复杂度O(n),空间O(1)。2. 排序数组(912题)使用三向切分快速排序,随机基准优化避免最坏情况,时间复杂度O(nlogn),空间O(logn)。3. 第K大元素(215题)基于快速选择算法,通过三色分区和递归减治在平均O(n)时间内完成查找。三题共同特点是利用分区思想优化处理,其中颜色分类和快速选择算法都体现了通过分区缩小问题规模的减治策略,而三向切分则有效解决了重复元素的处理问题。

2025-11-15 11:09:15 904

原创 [Linux——Lesson25.线程:生产与消费者模型]

本文探讨了多线程编程中的生产消费者模型及其两种实现方式。首先介绍了生产消费者模型的本质和优势,包括解耦生产者与消费者、平衡处理速度、提升并发效率等核心价值。然后详细分析了基于阻塞队列的实现方案,包括线程封装、同步机制设计和缓冲区管理。接着阐述了基于环形队列的优化实现,重点解析了POSIX信号量的应用和环形队列的特性。文章通过代码示例对比了两种方案的差异,指出阻塞队列适合动态扩容场景,而环形队列在固定容量下效率更高。最后总结了生产消费者模型的设计要点和优化思路,强调线程安全、合理容量规划及同步机制选择的重要性

2025-11-14 21:54:31 1212

原创 [Linux——Lesson24.线程:线程同步与互斥]

本文系统介绍了Linux多线程编程中的线程互斥与同步机制。主要内容包括: 线程互斥:通过互斥锁(Mutex)保护临界资源,解决数据竞争问题,详细讲解锁的初始化、加解锁操作及底层实现原理。 线程同步:使用条件变量协调线程执行顺序,避免饥饿现象,重点分析等待/唤醒机制及生产者-消费者模型应用。 实践方案:提供线程锁的C++封装实现(RAII风格)及完整示例代码,展示如何正确使用这些机制解决实际问题。 文章采用"问题-方案-原理"的递进方式,为多线程编程的安全性和高效性提供了系统性的指导方案。

2025-11-14 18:01:20 1231

原创 [Linux——Lesson23.线程概念与控制:线程基础]

本文主要介绍了Linux系统中的线程概念与控制机制。首先阐述了线程作为进程内部执行分支的重要性,以及线程通过轻量级进程(LWP)在Linux中的实现方式。详细讲解了线程的创建、终止、等待等基本操作,包括pthread_create、pthread_exit、pthread_join等关键函数的使用方法。文章还深入探讨了线程安全、线程分离、线程ID等核心概念,对比了线程与进程的区别与联系。同时介绍了虚拟地址空间和页表管理机制,包括多级页表结构和地址转换过程。最后简要提及了C++11多线程编程与原生线程库的关系

2025-11-12 22:43:13 1000 2

原创 2025-11-12[第三大的数、将x减到0的最小操作数]

本文包含两道算法题的解题思路摘要: 《第三大的数》解法: 使用set容器自动去重并排序 转换为vector后判断元素数量:若≥3则返回倒数第三元素,否则返回最大元素 时间复杂度O(nlogn) 《将x减到0的最小操作数》解法: 转化为寻找总和为(total-x)的最长连续子数组 使用滑动窗口法(适用于正数数组) 时间复杂度O(n),空间复杂度O(1) 核心是问题转化和窗口边界移动策略

2025-11-12 21:58:03 267

原创 [优选算法专题六.模拟 ——NO.37~39 替换所有的问号、提莫攻击、Z 字形变换]

摘要 本文解析了三道LeetCode算法题:1. 1576题通过遍历字符串,使用小写字母替换问号并避免相邻重复字符;2. 495题计算提莫攻击总中毒时长,处理时间重叠情况;3. 6题实现Z字形字符串转换,分析字符位置分布规律。三题均采用线性时间复杂度的解法,空间复杂度为O(1)或O(n)。关键思路包括:字符替换策略、重叠区间处理以及周期性位置规律应用。

2025-11-10 20:48:34 682

原创 [优选算法专题六.模拟 ——NO.40~41 外观数列、数青蛙]

文章摘要:本文解析了两个算法问题。38题"外观数列"通过迭代生成序列,使用双指针统计连续数字出现次数,时空复杂度均为指数级。1419题"数青蛙"要求计算最少的青蛙数量完成指定叫声序列,通过状态跟踪数组记录各字符状态,确保鸣叫顺序正确。当遇到'c'时复用完成鸣叫的青蛙,遇到其他字符时检查前驱状态是否存在,最终校验未完成状态。该解法的时间复杂度为O(L),空间复杂度为O(1)。两题分别展示了序列生成和状态机设计的典型算法应用。

2025-11-10 20:25:32 997

原创 [Linux——Lesson22.进程信号:信号保存 & 信号捕捉]

本文深入探讨了Linux信号机制的核心概念与应用。主要内容包括: 信号生命周期管理:从产生到处理的完整流程,重点解析了阻塞集与未决集的交互逻辑; 信号集操作函数:详细介绍了sigset_t类型及sigprocmask、sigpending等关键系统调用; 信号处理实践:涵盖信号捕捉时机(内核态返回用户态)、可重入函数注意事项和volatile关键字的防优化作用; 重要信号应用:特别分析了SIGCHLD信号在子进程管理中的关键作用,以及核心转储(coredump)的调试价值。 文章通过代码示例和原理图示,系统

2025-11-07 19:16:17 897

原创 [Linux——Lesson21.进程信号:信号概念 & 信号的产生]

本文重点介绍了Linux系统中的信号机制,详细阐述了信号的概念、产生方式及处理流程。信号作为进程间通信的软中断方式,可分为标准信号(1-31)和实时信号(34-64)。文章通过实际案例展示了信号的5种产生方式:键盘输入(如Ctrl+C)、系统调用(kill/raise/abort)、软件条件(如alarm)、硬件异常(除零/段错误)等。特别分析了信号捕捉机制,包括默认处理、忽略和自定义回调函数三种处理方式。通过深入剖析信号传递的底层原理,解释了操作系统如何通过中断机制和寄存器状态来检测和发送信号。最后从PC

2025-11-07 12:51:19 860

原创 [Linux系统编程——Lesson20.进程间通信:System V 共享内存]

本文详细介绍了Linux系统中的SystemV进程间通信机制,包括共享内存、消息队列和信号量。重点探讨了共享内存的原理和使用方法:内核创建共享内存块后,多个进程通过映射将其关联到自身地址空间,实现高效的数据共享。文章还分析了共享内存的接口函数(shmget、shmat等)、生命周期管理以及与其他IPC机制的共性。特别强调了共享内存的高效性源于"跳过内核中转"的特性,但也指出其缺乏同步机制,需要配合信号量或管道使用。对信号量的概念和操作接口(PV操作)也做了详细说明。最后总结了System

2025-11-06 16:47:05 928

原创 [Linux——Lesson19.进程间通信:管道通信]

本文介绍了Linux系统中进程间通信(IPC)的核心机制——管道通信。文章首先阐述了进程独立性和通信必要性,重点讲解了匿名管道和命名管道的实现原理及差异。匿名管道通过pipe()创建,仅适用于有血缘关系的进程;命名管道通过mkfifo()创建文件实体,支持无血缘关系进程通信。文中详细分析了管道的四种特殊读写情况、五种特性及使用规则,并通过代码示例展示了进程池的实现。最后比较了两种管道的区别,强调它们在建立连接后具有相同的语义。管道通信作为Linux IPC的基础机制,为进程协作提供了可靠的数据传输通道。

2025-11-01 11:10:40 737

原创 [优选算法专题五.位运算——NO.35~36 只出现一次的数字 II、消失的两个数字]

文章摘要 第一题解决「数组中除一个数字出现一次外,其余均出现三次」的问题,通过统计每个二进制位1的出现次数,对3取余确定目标数字的各位值。时间复杂度O(n),空间O(1)。 第二题处理「1~n+2范围缺失两个数字」的问题,利用异或运算性质找到两数的差异位,分组异或得到结果。时间复杂度O(n),空间O(1)。两题均采用位运算实现高效解答。

2025-10-27 23:28:40 302

原创 [优选算法专题五.位运算——常见位运算总结及NO.33~34判定字符是否唯一、丢失的数字]

本文总结了常用位运算操作及其应用。基础运算包括左移、右移、取反、按位与/或/异或等。具体技巧包括:判断某位值((n>>x)&1)、修改指定位(n|(1<<x)或n&(~(1<<x)))、提取最右1(n&-n)、消除最右1(n&(n-1))等。异或运算具有a^0=a、a^a=0等特性。 应用实例:1)判断字符唯一性,利用位图标记字符出现情况;2)寻找缺失数字,通过异或完整序列与现有数组。位运算在时间和空间复杂度上表现优异,通常为O(n)和O(

2025-10-26 17:49:25 1035

原创 [优选算法专题四.前缀和——NO.31~32 连续数组、矩阵区域和]

525.连续数组:将0转-1后转化为求"和为0的最长子数组",利用前缀和+哈希表记录首次出现位置,实现O(n)时间查找。哈希表初始化为{0:-1}处理边界情况,空间复杂度O(n)。 1314.矩阵区域和:通过二维前缀和预处理矩阵,将每个k半径区域和计算优化到O(1)。构建dp数组(多一行一列)后,用几何加减法快速求解任意矩形和,时间复杂度O(mn),空间复杂度O(mn)存储前缀和。避免暴力法的O(mnk²)耗时。

2025-10-23 23:31:04 471

原创 [Linux文件系统——Lesson17.软硬链接]

本文介绍了Linux系统中的软硬链接原理及应用。硬链接是通过共享inode实现文件关联,不能跨文件系统或链接目录,但能防止误删数据;软链接则是独立文件存储目标路径,支持跨系统和目录链接,类似快捷方式。两者各有适用场景:硬链接适合数据共享和保护,软链接便于路径管理和跨系统访问。文章详细对比了两者的核心原理、特性差异及典型应用,并阐述了Linux系统设计软硬链接的互补意义,旨在灵活高效地管理文件路径与数据。

2025-10-23 23:03:30 769

原创 [Linux系统编程——Lesson18.动静态库]

本文深入探讨了Linux环境下动静态库的制作与工作原理。文章首先通过实例解释了库的本质是预编译目标文件的集合,用于代码复用和共享。随后详细介绍了静态库(.a)和动态库(.so)的制作过程,包括编译选项(-fPIC)、打包命令(ar/gcc)和目录组织规范。在原理层面,重点分析了动态库的位置无关码(PIC)特性、运行时加载机制以及共享内存映射原理,解释了动态库如何通过"起始地址+偏移量"实现多进程共享。最后对比了动静态库在文件大小、内存占用、更新维护等方面的差异,并提供了三种动态库使用方法

2025-10-22 10:23:23 1255 5

原创 [优选算法专题四.前缀和——NO.30 和可被 K 整除的子数组]

摘要:该算法通过前缀和与同余定理优化子数组和计算,利用哈希表统计余数出现次数,将时间复杂度从O(n²)降至O(n)。关键点包括:1) 前缀和差值与同余定理转换;2) 负余数处理;3) 哈希表实时记录余数频率。初始化时需注意处理从数组首元素开始的子数组情况。算法时间复杂为O(n),空间复杂度为O(min(n,k)),适用于处理大规模数据。

2025-10-20 22:40:16 405 3

原创 [优选算法专题四.前缀和——NO.29 和为 K 的子数组]

本文介绍了一种高效解决"和为K的子数组"问题的算法。该算法利用前缀和与哈希表相结合,将时间复杂度优化至O(n)。核心思路是通过计算前缀和sum[i],将问题转化为查找sum[j]=sum[i]-k的出现次数。哈希表用于记录前缀和及其出现频率,初始化时需设置hash[0]=1以处理边界情况。遍历时需注意顺序:先查询sum-k再更新当前sum。该算法显著优于暴力解法,空间复杂度为O(n),特别适合处理大规模数组。

2025-10-20 22:04:25 440

原创 [优选算法专题四.前缀和——NO.28 除自身以外数组的乘积]

《除自身以外数组的乘积》解题分析:题目要求计算数组中每个元素除自身外的乘积。通过三次循环遍历数组,时间复杂度为O(n)。使用两个额外数组,空间复杂度为O(n),若不计输出数组可优化至O(1)。

2025-10-20 21:32:19 279

原创 [Linux文件系统——Lesson16.Ext系列⽂件系统]

本文系统介绍了Linux文件系统的核心机制,重点分析了ext系列文件系统的设计原理。主要内容包括: 磁盘物理结构:详细讲解了CHS和LBA地址的转换原理,以及磁盘的分区、格式化过程。 文件系统架构:深入剖析了ext2/ext3/ext4的块组(BlockGroup)设计,包括超级块(SuperBlock)、组描述表(GDT)、块位图(BlockBitmap)、inode位图(InodeBitmap)、inode表和数据块(DataBlock)等核心组件。 文件管理机制:阐述了inode如何通过直接/间接指针

2025-10-20 13:35:05 1284 21

原创 [优选算法专题四.前缀和——NO.27 寻找数组的中心下标]

摘要:本文提出了一种寻找数组中心下标的高效方法。通过预处理前缀和数组f(记录每个元素左侧和)和后缀和数组g(记录右侧和),然后遍历数组比较f[i]与g[i]是否相等。算法时间复杂度O(n),空间复杂度O(n)(可优化至O(1))。关键点在于严格区分不包含当前元素的前后和计算,避免重复。

2025-10-18 10:56:24 273 3

原创 [优选算法专题四.前缀和——NO.26二维前缀和]

该题目介绍了二维前缀和的计算方法。首先读入n×m矩阵,然后构建前缀和矩阵dp,其中dp[i][j]表示从(1,1)到(i,j)的矩形区域和,计算公式为:dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1]。查询时通过四个角点坐标快速计算任意矩形区域和:dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]。该方法预处理O(nm),查询O(1),适合大量查询场景,注意使用long

2025-10-18 10:32:22 433 1

原创 [优选算法专题四.前缀和——NO.25一维前缀和]

本文解析了一维前缀和算法。通过构建前缀和数组dp,其中dp[i]表示前i项和,实现O(1)时间区间查询。算法特点包括:数组从1开始存储避免边界问题;使用long long防溢出;区间和公式为dp[r]-dp[l-1]。预处理O(n),查询O(1),特别适合大规模查询场景。

2025-10-18 09:44:37 423 1

原创 [Linux系统文件——Lesson15.文件缓冲区]

本文深入剖析了Linux文件系统中的缓冲区机制,重点解释了用户级缓冲区和文件缓冲区的区别及其工作原理。通过实验演示了fork()后缓冲区行为的差异,揭示了缓冲区在进程间的独立性。文章详细阐述了缓冲区的三种刷新策略(无缓冲、行缓冲、全缓冲)及其应用场景,并分析了引入缓冲区机制的核心价值:减少系统调用次数、降低CPU切换损耗、实现CPU与I/O设备的并行工作。最后通过模拟实现FILE结构体及其接口(my_fopen、my_fwrite等),直观展示了缓冲区的运作机制。全文系统性地讲解了缓冲区在平衡速度差异、优化

2025-10-17 17:04:50 582 4

原创 [Linux系统编程——Lesson14.基础IO:系统文件IO]

本文深入探讨了Linux系统编程中的基础IO操作,从文件概念到系统调用实现。主要内容包括:1. 文件操作的本质,区分狭义(磁盘文件)和广义(Linux万物皆文件)理解;2. C语言文件接口与系统调用(如open/write/close)的关系;3. 关键概念文件描述符(fd)及其分配规则;4. 内核管理文件的机制(struct file结构体);5. 实际应用如重定向的实现原理。文章通过系统视角揭示了文件操作的底层逻辑,强调"一切皆文件"的Linux设计哲学,帮助读者建立从用户层到内核层

2025-10-16 23:05:07 1453 7

原创 [Linux系统编程——Lesson13.自定义shell(讲解原理)]

本文介绍了如何通过Linux系统编程实现一个简易的自定义Shell。主要内容包括:1. 基本功能实现:打印命令提示符、获取用户输入命令、分割命令字符串为参数列表;2. 命令执行机制:使用fork创建子进程,通过execvp执行非内建命令;3. 内建命令处理:单独实现cd、export、echo等需要在父进程执行的命令;4. 关键编程技术:包括环境变量处理、进程管理、字符串分割等。文章提供了完整的代码示例,详细说明了每个功能模块的实现方法,并解释了为何内建命令必须直接在父进程中处理。该Shell模拟了Linu

2025-10-14 22:59:07 858 9

原创 [Linux系统编程——Lesson12.进程控制:替换]

本文介绍了Linux系统编程中的进程程序替换技术。通过exec系列函数,子进程可以加载并执行全新的程序,而不必局限于父进程的代码分支。文章详细解释了进程替换的原理:替换后进程的PID不变,仅覆盖代码段和数据段,保留部分内核资源。提供了多种exec函数的使用示例,包括execl、execvp、execle等,并比较了它们的传参方式和适用场景。此外,文章还探讨了环境变量在进程替换中的继承机制,以及进程替换与程序加载到内存的关系。最后指出,进程替换是Linux实现多任务协作的基础技术,与fork配合使用可以创建功

2025-10-14 15:57:04 838 7

原创 [Linux系统编程——Lesson11.进程控制:等待]

摘要: 本文深入探讨了Linux进程控制中的进程等待机制,重点解析了wait和waitpid系统调用的功能与差异。进程等待的核心目的是回收子进程资源(避免僵尸进程导致内存泄漏)和获取子进程退出状态(如退出码或终止信号)。 wait:阻塞父进程,等待任意子进程退出,功能简单但灵活性低。 waitpid:支持非阻塞等待(WNOHANG选项)和指定子进程等待,适用于复杂场景(如多进程管理)。 status参数:通过位图存储退出信息,需配合宏(如WEXITSTATUS)解析,区分正常退出(退出码)与信号终止(信号编

2025-10-13 23:32:46 1343 7

原创 [Linux系统编程——Lesson10.进程控制:创建与终止]

本文深入探讨了Linux系统编程中的进程创建与终止机制。在进程创建方面,重点解析了fork()系统调用的内核执行流程,包括资源分配、写时拷贝技术、父子进程返回值的差异设计,以及fork()调用失败的常见原因。在进程终止部分,系统梳理了三种退出场景(正常成功、正常失败和异常终止),对比分析了exit()和_exit()函数的区别,并详细说明了进程退出码的作用机制。文章通过大量代码示例和原理图解,帮助读者全面理解Linux进程生命周期管理的核心概念与实践技巧,为系统编程打下坚实基础。

2025-10-12 09:59:43 734 7

原创 [Linux系统编程——Lesson9.虚拟内存管理 - 第⼀讲:从虚拟到物理的内存寻址 ]

本文深入解析了Linux虚拟内存管理的核心机制。首先介绍了mm_struct作为进程地址空间"总管家"的关键作用,详细剖析了其核心字段和与VMA、页表的关联关系。随后通过对比直接使用物理地址的三大问题(无安全隔离、无地址确定性、无效率优化),系统阐述了虚拟地址空间的解决方案:安全隔离通过页表权限检查实现;地址确定性由固定虚拟地址布局保证;效率优化则依靠延迟分配和按需换页机制。虚拟地址空间不仅解决了内存管理的基本问题,还实现了进程管理与内存管理的解耦,成为现代操作系统多进程并发的基础支撑。

2025-10-11 10:03:21 680 1

原创 [Linux系统编程——Lesson8.进程地址空间和区域划分]

本文深入探讨了Linux系统中进程地址空间的概念及其重要性。文章首先指出编程语言中的内存地址实际上是虚拟地址而非物理地址,并通过父子进程共享变量实验证明了这一点。随后详细解释了进程地址空间的结构(mm_struct)和页表机制,阐明了虚拟地址如何通过页表映射到物理内存。重点分析了写时拷贝(COW)技术的原理和优势,以及进程地址空间的核心作用:实现内存隔离、提高管理效率、支持多任务并发。文章还解答了为何要有进程地址空间、malloc/new的工作原理等关键问题。最后强调进程地址空间作为"中间层&qu

2025-10-10 23:18:51 1568 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除