- 博客(18)
- 收藏
- 关注
原创 线程与进程:深入理解多线程机制
本文系统介绍了Linux线程的相关概念与实现机制。首先区分了进程与线程的核心差异:进程是资源分配单位,拥有独立地址空间;线程是CPU调度单位,共享进程资源。文章详细阐述了线程的基本概念、优缺点、私有资源(如线程ID、栈空间等),并通过代码验证了线程共享地址空间和异常处理机制。重点讲解了线程同步与互斥问题,包括互斥锁的使用、死锁条件及预防措施。最后通过生产者消费者模型展示了条件变量与互斥锁的配合使用,说明如何通过缓冲区实现线程解耦和同步控制。全文通过理论讲解结合代码实例,深入剖析了Linux线程的实现原理和应
2025-12-15 19:07:12
946
原创 C++11核心特性全解析
本文全面介绍了C++11的关键特性,包括auto关键字实现类型自动推导、范围for循环简化容器遍历、lambda表达式创建匿名函数、override和final关键字增强继承安全性、nullptr替代NULL解决指针歧义,以及左值/右值引用的区别与应用。通过大量代码示例,展示了这些特性如何使C++更现代、高效和安全,帮助开发者编写更简洁可靠的代码。文章还提示后续将介绍智能指针等高级特性。
2025-12-03 14:20:12
724
原创 掌握Linux信号:从入门到精通(1w5千字详解版)
摘要 本文系统介绍了Linux信号机制,通过门铃的生活案例类比信号的产生、识别和处理过程。信号处理分为默认、自定义和忽略三种方式,具有异步性特点。文章详细阐述了五种信号产生方式:kill命令、键盘输入、kill/raise函数、软件条件(alarm函数、管道异常)和硬件异常(除0错误、野指针)。通过代码示例验证了信号处理机制,并深入分析了指针的虚拟地址本质及硬件异常的信号传递原理。Linux通过先描述再组织的设计哲学管理信号,体现了操作系统对进程的精细控制能力。
2025-11-21 10:25:32
719
原创 Linux:进程间通信
本文介绍了Linux系统中常见的进程间通信(IPC)方式,包括匿名管道、命名管道和共享内存。匿名管道适用于有血缘关系的进程间通信,通过pipe()函数创建,具有半双工、缓冲区有限等特点。命名管道(FIFO)通过mkfifo()创建,能实现无血缘关系进程的通信。共享内存通过shmget等函数实现,允许多个进程访问同一块内存区域,效率较高但需要同步机制。文中详细讲解了每种通信方式的原理、特点和使用方法,并通过代码示例演示了具体实现过程,包括父子进程通过管道通信、无血缘关系进程通过命名管道通信,以及生产者消费者模
2025-11-16 21:09:43
1309
原创 揭秘Linux进程分身术:fork函数的神奇机制
本文深入探讨了Linux进程管理的核心机制,重点解析了fork()系统调用的原理与实现。通过代码示例详细说明fork()创建子进程的过程:内核复制父进程PCB和虚拟地址空间,采用写时复制技术优化内存使用,通过修改各自栈空间实现单次调用、双重返回的效果。文章对比了exit()与_exit()的区别,分析了进程等待机制(wait/waitpid)及状态获取方法,并阐述了进程虚拟地址空间与物理内存的映射关系。此外,还简要介绍了冯诺依曼体系结构和操作系统的五大核心功能(进程管理、内存管理、文件管理、设备管理和用户接
2025-10-24 19:27:05
938
2
原创 Linux中Inode与Vnode区别以及软硬链接与动静态库
本文深入探讨了Linux文件系统中的inode与vnode概念。inode作为磁盘上的持久化数据结构,存储文件元信息(如编号、权限、大小等),具有唯一标识性且与文件名无关。vnode则是内存中的虚拟节点,为不同文件系统提供统一接口。文章详细对比了硬链接(共享inode)和软链接(独立inode)的特性差异,并通过代码演示验证了硬链接共享inode、软链接独立inode的行为特点。最后解释了链接计数机制,说明文件真正删除的条件是链接计数归零。
2025-10-05 15:47:12
1034
原创 Linux C缓冲区机制全解析
本文深入探讨了Linux C语言中的缓冲区机制。首先通过快递站点的生活化类比,解释了缓冲区的概念和作用——作为应用程序与内核间的数据中转站,减少系统调用次数,提升I/O效率。文章详细分析了三种缓冲类型:行缓冲(遇换行符刷新)、全缓冲(缓冲区满刷新)和无缓冲(立即输出),并通过代码示例演示了如何用setvbuf函数控制缓冲模式。特别强调了系统调用write和标准I/O函数printf的关键区别:前者直接进入内核缓冲区,后者则经过用户态缓冲。最后展示了一个自定义缓冲区的简单实现(MY_FILE结构体),包括缓冲
2025-09-26 15:40:33
909
原创 揭秘Linux文件管理与I/O重定向核心
本文深入解析Linux中的I/O重定向机制,围绕"一切皆文件"的核心理念展开。文章首先介绍文件描述符(fd)的概念,说明标准输入(stdin)、输出(stdout)和错误(stderr)对应的默认文件描述符。重点阐述shell中三种重定向操作符:">"覆盖输出、">>"追加输出和"<"输入重定向的实现原理,解析其底层通过dup2系统调用修改文件描述符指向的机制。通过具体代码示例,演示了如何利用open和d
2025-09-18 22:02:16
1088
原创 C++内存管理:new与delete的深层解析
本文深入对比了C++中new/delete与C语言malloc/free的本质区别。new/delete作为C++运算符具有类型安全、自动调用构造/析构函数、支持重载等特性,而malloc/free仅是库函数。关键区别在于:new在分配内存后自动调用构造函数,delete释放前调用析构函数;支持类特定重载operator new/delete;编译器将new/delete分解为内存分配和对象构造的组合操作。文章通过代码示例和汇编分析,阐明了C++内存管理机制的设计哲学,建议在C++开发中优先使用new/de
2025-09-14 20:14:12
1076
原创 揭秘Linux文件管理与C语言IO操作
本文系统介绍了C语言文件操作和Linux文件系统知识。主要内容包括:1)C语言fwrite/fread函数的使用方法及参数详解,通过示例代码演示二进制文件读写操作;2)Linux文件路径概念,区分绝对路径和相对路径;3)深入剖析Linux"一切皆文件"的设计哲学,解释文件系统通过inode管理未打开文件,通过文件描述符表、打开文件表和v-node表三级结构管理已打开文件的机制。文章结合代码示例和原理图,帮助读者理解文件操作底层实现,为后续学习I/O重定向奠定基础。
2025-09-11 13:22:07
961
原创 进程与并发:从概念到实战全解析
本文系统讲解了进程的核心概念。首先定义了进程是动态的程序执行实例,由程序、数据和执行上下文三部分组成,并通过PID唯一标识。其次详细阐述了进程控制块(PCB)作为管理进程的关键数据结构,包含进程状态、寄存器值等关键信息。文章重点分析了进程的多种状态(运行、阻塞、挂起等)及其转换机制,特别区分了阻塞与挂起状态的区别。此外,还介绍了僵尸进程和孤儿进程的形成原理及处理方法。最后简要说明了环境变量的全局特性。全文通过理论讲解配合C语言代码示例,深入浅出地呈现了进程管理的核心知识体系。
2025-09-04 15:17:35
1270
原创 深入解析红黑树:平衡与插入全攻略
红黑树是一种自平衡二叉搜索树,具有以下特性:每个节点为红或黑,根节点和叶子节点为黑,红色节点的子节点必须为黑,且从任一节点到其叶子节点的路径包含相同数目的黑色节点。插入操作时,新节点默认为红色以避免全局调整,主要通过变色和旋转(单旋或双旋)来维持平衡。相比AVL树,红黑树对平衡性要求较低,旋转次数更少,综合性能更优,广泛应用于C++ STL的map和set等数据结构。插入时间复杂度为O(logN),适合频繁增删的场景。
2025-08-30 14:05:22
982
原创 深入解析AVL树:平衡与旋转全攻略
本文详细介绍了平衡二叉树(AVL树)的核心概念与实现方法。AVL树通过平衡因子(右子树深度减左子树深度)确保每个节点的左右子树高度差不超过1,当绝对值大于1时通过四种旋转操作(左单旋、右单旋、左右双旋、右左双旋)进行平衡调整。文中提供了完整的C++代码实现,包括节点结构、旋转操作和平衡因子更新逻辑。相比普通二叉搜索树,AVL树通过额外维护成本(O(logn))换取最坏情况下O(logn)的稳定操作时间,适用于需要高性能查询的场景(如通讯录管理、词频统计)。文章还分析了AVL树的优缺点。
2025-08-02 17:24:42
1673
1
原创 STL:栈、队列、双端队列、优先级队列特性与接口详解
本文介绍了STL中的容器适配器及其应用。首先回顾了容器分类,重点讲解了栈(stack)和队列(queue)的特性及接口使用,通过代码示例演示了它们的操作特点。接着分析了双端队列(deque)作为底层容器的优势,并详细解析了优先级队列(priority_queue)的底层实现原理,包括二叉堆结构和调整算法。最后提供了使用优先级队列解决算法问题的示例。文章系统性地阐述了这些数据结构的特点、实现原理和实际应用,对理解STL容器适配器有较好的参考价值。
2025-08-01 17:35:49
2035
1
原创 深入解析C++类与对象核心概念
类是自定义数据类型,是c语言的结构体进化而成的而对象是类实例化出的,用数据类型定义一个变量,可以对比int/char实例化出一个对象来进行理解!int _month;int _day;受先需要解释的一点是_符号表示是成员变量,定义为私有的,class为定义类的关键字,就像在c语言中定义一个结构体需要用struct一样,Date为类的名字,{}好重为类的主题,花括号后的分号;不能省略,如果省略,编译器会报错。类中的函数称为成员函数。
2025-07-27 17:45:17
5102
1
原创 最全解析之二叉搜索树:高效查找与增删
二叉搜索树是一种特殊的二叉树,其左子树所有节点值小于根节点,右子树所有节点值大于根节点。主要操作包括:1.插入-空树直接插入根节点,非空树按大小关系查找位置插入;2.查找-从根节点开始比较,最多查找树高次;3.删除-分五种情况处理,最复杂的是左右子树都不为空时需找右子树最小节点替代。二叉搜索树中序遍历结果有序,可应用于键值对存储(如学生成绩管理系统),时间复杂度一般为O(logn),最坏情况下退化为链表时为O(n)。后续可发展为AVL树和红黑树等平衡二叉搜索树。
2025-07-27 16:29:50
1857
1
原创 解密C/C++指针:内存操作的艺术
《C/C++指针详解:从基础到数组指针与指针数组》 本文系统讲解了指针的核心概念与应用。首先介绍了普通指针(整型指针)的基础原理,包括地址操作和解引用;其次解析了字符指针对字符串的存储方式;重点区分了数组指针(指向整个数组的指针)和指针数组(存储指针的数组),并通过内存地址变化和二维数组案例阐明其差异;最后简述了动态内存管理的优势。文章通过代码示例和内存分析,揭示了指针运算的本质是指向类型大小与偏移步数的乘积,帮助读者深入理解指针机制。
2025-07-07 17:49:50
1568
原创 STL—vector的使用与迭代器失效解析:
迭代器的底层实际就是一个指针,因此迭代器失效实际上就是迭代器底层对应指针所指向的空间被销毁了,而使用(访问)一块已经被销毁的空间,造成的后果就是引发程序崩毁。如图所示,插入1-8,然后调用resize,将空间大小调整为10,新增元素被初始化为0,所以打印出来的结果是1、2、3、4、5、6、7、8、0、0。区别:resize直接改变容器中元素的数量,如果新的大小大于当前的大小,则新增元素会被初始化,如果新的大小小于当前的大小,则后面的元素会被删除。如下图所示,输出结果为一个三行四列,元素大小为0的矩阵。
2025-06-07 10:18:32
2113
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅