- 博客(25)
- 收藏
- 关注
原创 【Linux】文件 I/O 操作详解:C语言库函数 vs 系统调用
本文对比分析了Linux系统中文件I/O操作的两种实现方式:C标准库函数和系统调用。标准库函数(如fopen、fread/fwrite)提供缓冲机制和跨平台兼容性,使用FILE*指针作为句柄;系统调用(如open、read/write)则直接与内核交互,效率更高但使用更复杂。文章详细介绍了两种方式在文件路径处理、打开模式、读写操作等方面的具体实现差异,并解释了进程工作目录、位标志参数传递等关键概念。建议开发者根据性能需求和开发效率,合理选择或结合使用这两种方式。理解这些底层原理有助于编写更高效可靠的I/O操
2025-11-28 18:18:04
656
原创 【Linux】命令行参数与环境变量
本文深入解析了Linux系统中命令行参数和环境变量这两个关键概念。环境变量作为操作系统的"运行参数",具有全局特性,可通过export命令设置或配置文件持久化,常用命令包括echo、env等;在C程序中可通过main函数参数或environ变量获取。命令行参数则是程序启动时传入的参数,通过main函数的argc和argv接收。两者虽都是程序与系统交互的方式,但环境变量具有全局性和继承性,而命令行参数仅对当前程序有效。理解两者的区别和联系,对Linux系统开发和程序交互有重要意义。
2025-11-01 13:08:28
1098
原创 【Linux】进程管理:优先级、上下文与调度深度解析
本文深入解析了Linux系统中进程管理的核心机制,主要包括三个方面:1) 进程优先级机制,详细解释了PRI和nice值的概念及调整方法;2) 进程切换原理,阐述了上下文保存/恢复的全过程及其在多任务并发中的关键作用;3) Linux 2.6内核的O(1)调度算法,分析了活动队列、过期队列的双队列设计及其通过指针交换实现的高效调度策略。这些机制共同保证了Linux系统在多任务环境下的高效性和稳定性。
2025-10-20 10:45:00
1929
原创 【Linux】进程地址空间
本文深入探讨了Linux系统中的程序地址空间管理机制。首先回顾了程序内存空间布局,指出C/C++程序中看到的地址都是虚拟地址而非物理地址。通过fork示例展示了父子进程虚拟地址相同但内容不同的现象,揭示了操作系统通过页表和MMU实现虚拟地址到物理地址的转换机制。重点分析了写时复制技术如何实现内存高效共享,以及mm_struct结构体如何管理进程地址空间。最后阐述了虚拟地址空间的三大优势:安全隔离、解耦管理和灵活加载,并详细说明了进程地址空间与物理内存映射关系的建立过程,包括程序加载、动态分配和页面置换等环节
2025-10-20 08:30:00
1746
原创 【Linux】进程状态
摘要:本文详细介绍了操作系统中进程状态的流转过程,重点分析了Linux内核中定义的7种进程状态:运行(R)、睡眠(S)、磁盘休眠(D)、停止(T)、死亡(X)、僵尸(Z)以及前后台进程组。文章对比了经典进程状态模型与Linux实现差异,解释了僵尸进程和孤儿进程的产生机制及危害,并提供了相关代码示例和状态查看方法(如ps命令)。通过分析进程从创建到终止的生命周期,揭示了操作系统如何高效管理进程资源,确保系统稳定运行。理解这些状态对于程序调试和系统优化具有重要意义。
2025-10-19 09:15:00
979
原创 【Linux】进程的概念
本文摘要: 操作系统是计算机系统的"大管家",负责管理硬件资源和提供程序执行环境。其核心在于"先描述,再组织"的管理方式,通过数据结构描述资源并用链表组织。进程是加载到内存的程序,由PCB(如Linux的task_struct)描述,包含PID、状态等信息。fork系统调用用于创建进程,子进程复制父进程资源并采用写时拷贝技术,父子进程通过不同返回值区分身份。操作系统通过系统调用和库函数提供接口,确保系统安全的同时为用户提供服务。
2025-10-18 08:45:00
825
原创 【Linux】冯・诺依曼体系结构 —— 计算机的 “骨架”
冯・诺依曼体系结构是现代计算机的基础,其核心是"存储程序"概念,将程序和数据以二进制形式存储在存储器中,由CPU按顺序执行指令。该体系由输入设备、存储器、运算器、控制器和输出设备五大部分组成,所有设备只能通过内存交换数据。工作原理遵循"取指令→译指令→执行指令→存结果"的循环流程。CPU不直接访问外设,而是通过内存进行数据中转,以解决速度不匹配问题并提高效率。这种分层存储和集中控制的设计,使计算机能高效处理各种任务,如QQ消息的收发过程就完全遵循这一体系的数据流动机制
2025-10-17 08:15:00
1660
原创 【Linux】Shell命令与权限管理
摘要: Shell是Linux用户与内核交互的命令行解释器,负责指令翻译和结果反馈。Linux权限管理分为超级用户(root)和普通用户,建议日常使用普通用户并通过sudo获取权限。用户管理包括创建(useradd)、删除(userdel -r)和切换(su/su-)。文件权限分为所有者(u)、所属组(g)和其他用户(o),通过chmod、chown、chgrp设置读写执行(rwx)权限,目录权限需注意可执行(x)权限的必要性。umask影响默认权限,粘滞位(chmod +t)限制目录文件删除权限。权限管理
2025-10-16 08:41:22
1345
原创 【Linux】Linux基本指令
本文介绍了Linux系统中常用的命令行指令及其功能,涵盖文件管理、系统操作、时间查看等多个方面。主要内容包括:ls、pwd、cd等基础目录操作命令;touch、mkdir、rm等文件管理指令;man帮助文档查询;cp、mv文件操作命令;cat、more、less内容查看工具;head、tail日志处理命令;date、cal时间相关操作;find、which、whereis文件搜索工具;alias、grep文本处理命令;以及zip、unzip、tar压缩解压工具和rzsz文件传输工具。每个命令都详细说明了语法
2025-10-11 18:30:30
634
原创 【C++】深入理解红黑树:概念、性质和实现
红黑树是一种自平衡二叉搜索树,通过节点着色(红/黑)和旋转操作维护近似平衡。其核心性质包括:根节点为黑、无连续红节点、各路径黑节点数相同。插入操作分为两步:按二叉搜索树规则插入红色新节点,然后根据叔叔节点颜色分情况调整(变色或旋转)。验证红黑树需要检查是否满足二叉搜索树性质和红黑树的5条约束条件。红黑树保证了最坏情况下的高效操作,插入、查询、删除时间复杂度均为O(logn)。
2025-10-02 10:04:05
6094
原创 【C++】 AVL( 二叉搜索树)详解
AVL树是一种自平衡二叉搜索树,通过平衡因子(左右子树高度差绝对值不超过1)保持平衡。其核心操作包括:插入时调整平衡因子,并通过四种旋转(左单旋、右单旋、左右双旋、右左双旋)恢复平衡。插入流程遵循二叉搜索树规则,失衡时根据parent和子节点的平衡因子判断旋转类型。验证时需检查中序有序性及所有节点的平衡因子与高度差是否匹配。AVL树将查找复杂度优化至O(log n),适用于动态数据的高效管理。
2025-09-24 21:27:04
738
原创 C++ 二叉搜索树的详解与实现
本文系统介绍了二叉搜索树(BST)及其核心操作。BST是一种左子树节点值均小于根节点、右子树节点值均大于根节点的二叉树。文章详细讲解了查找、插入和删除操作的递归与非递归实现方法,重点分析了删除节点时处理的三种情况(无子节点、单子节点和双子节点)。通过指针引用技巧,递归实现显著简化了代码逻辑。文章还涉及中序遍历、拷贝构造、析构函数等其他操作,并分析了BST的性能特点:最优情况下(接近完全二叉树)操作时间复杂度为O(logn),最差情况下(退化为单支树)降为O(n)。BST的中序遍历结果有序性使其具有重要应用价
2025-09-12 15:48:31
862
原创 C++多态深度解析:从构成条件到虚函数表机制
本文深入解析了C++多态的核心机制。多态通过虚函数实现,允许不同类对象调用同一函数时产生不同行为,需满足基类指针/引用调用虚函数且派生类重写虚函数的条件。文章详细介绍了虚函数表的工作原理、虚函数重写的规则(包括协变和析构函数重写),对比了重载、覆盖和隐藏的区别,并阐述了抽象类的概念。此外,还分析了单继承和多继承场景下的虚函数表结构,解释了为何必须通过基类指针/引用才能实现多态。最后,通过代码示例演示了虚函数表的实际内存布局,帮助读者全面理解多态的实现原理。
2025-09-07 14:31:02
767
原创 C++ 继承 机制全解析
本文系统介绍了C++中的继承机制,主要内容包括:1. 继承的基本概念与定义方式,包括访问权限控制规则;2. 基类和派生类对象的赋值转换规则("切片"机制);3. 继承体系中的作用域规则和名称隐藏问题;4. 派生类中构造/析构等默认成员函数的特殊处理;5. 多继承中的菱形继承问题及其解决方案(虚拟继承);6. 继承与组合两种代码复用方式的区别与适用场景。重点分析了虚拟继承通过虚基表指针解决数据冗余和二义性的实现原理,并对比了继承(is-a)和组合(has-a)的优缺点,建议优先使用组合降低
2025-09-06 09:26:11
794
原创 C++ 中 stack、queue 的使用及模拟实现
本文介绍了C++中三种容器适配器(stack、queue、priority_queue)的使用与实现原理。首先解析了stack和queue的基本操作及其模拟实现方法,重点阐述了priority_queue基于堆的实现机制,包括仿函数比较器、向上/向下调整算法等核心内容。同时探讨了容器适配器依赖基础容器、限制接口的设计特点,并分析了deque作为stack和queue默认底层容器的优势。通过底层实现剖析,揭示了这些适配器在保持特定数据结构特性的同时,如何高效复用基础容器功能,为开发者提供了更灵活的数据结构选择
2025-08-13 00:02:27
1118
原创 C++ list 类的使用与模拟实现
本文详细介绍了C++ STL中list容器的实现原理与使用方法。首先对比了list与vector的核心差异,重点分析了list作为双向循环链表的特性与优势。文章深入讲解了list的节点结构设计、迭代器实现(包括普通和const迭代器的模板复用技巧)以及常用接口的模拟实现。特别强调了迭代器失效问题及其解决方案,并展示了哨兵节点在简化边界条件处理中的重要作用。通过从底层实现的视角剖析list容器,帮助读者深入理解STL容器的设计思想,为高效使用标准库和自定义容器奠定基础。
2025-08-03 18:56:00
1116
原创 C++ vector 类的使用与模拟实现
本文介绍了C++中vector容器的使用与底层实现。vector作为动态数组容器,具有连续存储、自动扩容等特性,支持高效随机访问。文章详细讲解了vector的构造方法、迭代器使用、空间管理(resize/reserve)以及增删查改操作,重点分析了迭代器失效问题及其解决方案。同时通过模拟实现vector的核心功能(包括三个指针管理、深拷贝、扩容策略等),深入剖析了vector的底层原理。最后比较了vector与数组、string的区别,帮助开发者根据需求选择合适的容器。掌握vector的使用技巧和实现原理,
2025-07-31 14:34:40
1191
原创 深入理解 C++ string 类:从使用到模拟实现
本文详细介绍了C++中的string类使用与实现。首先讲解了string类的常用接口,包括构造方法、容量操作、访问遍历、修改操作等核心功能。然后重点演示了如何模拟实现string类,从基本结构、容量操作到迭代器支持、拷贝构造、运算符重载等完整功能。通过对比标准库实现和模拟实现,帮助读者从"会用"到"懂原理",深入理解string类的底层逻辑。文章最后提供了完整的模拟实现代码,并强调这种学习思路对于掌握C++编程的重要性。
2025-07-26 08:30:00
664
原创 C++ 模版初阶
C++模板技术实现泛型编程摘要:C++模板通过类型参数化解决了重复编写相似逻辑代码的问题。函数模板(如交换函数)可自动生成针对不同类型的版本,支持隐式/显式实例化,遵循普通函数优先的匹配原则。类模板(如栈)可创建通用数据结构,实例化时需显式指定类型。模板的核心价值在于"一次编写,多类型复用",是STL容器实现的基础。该技术显著提高了代码复用性和灵活性,是泛型编程的核心机制。
2025-07-25 07:15:00
605
原创 深入理解 C/C++ 内存分布与动态内存管理
本文深入解析C/C++内存管理机制,重点介绍程序运行时的内存分布(栈、堆、数据段、代码段)及动态内存管理技术。文章对比了C语言(malloc/calloc/realloc/free)和C++(new/delete)的内存管理方式,特别强调了new/delete对自定义类型构造/析构函数的自动调用机制。同时剖析了内存泄漏的危害及预防措施,帮助开发者理解从语法特性到运行本质的完整链路,为编写高效稳定的程序奠定基础。
2025-07-24 11:50:00
907
原创 类与对象(下)深度剖析:构造、静态、友元与内部类
本文深入探讨C++面向对象编程中的关键特性:构造函数初始化列表与函数体赋值的区别,强调引用和const成员必须使用初始化列表;分析静态成员变量的共享性及类外初始化要求;介绍友元函数突破封装访问私有成员的特性;讲解内部类作为外部类友元的特性及其独立性。这些进阶特性可优化代码结构,但也需谨慎使用以避免过度破坏封装性。
2025-07-24 01:03:55
884
原创 [C++]类与对象(中):深入理解类的六个默认成员函数
【摘要】C++空类包含6个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值运算符重载、取地址重载和const取地址重载。构造函数初始化对象,析构函数清理资源;拷贝构造函数实现对象复制,涉及资源管理时需要深拷贝;赋值运算符重载需注意连续赋值和自赋值问题。const成员函数保障对象状态不被修改。对于资源管理类(如动态内存),必须自定义拷贝构造、赋值重载和析构函数以避免浅拷贝导致的内存问题,而简单类可依赖编译器生成的默认实现。流运算符重载通常作为友元函数实现。合理运用这些特性是C++面向对象编程的核心。
2025-07-05 22:15:16
924
原创 【C++】类与对象的初步认识
本文介绍C++类与对象相关知识。C++中类通过`class`定义,成员含变量与函数,定义方式有声明定义全放类体中、声明放`.h`文件成员函数定义放`.cpp`文件两种。类的访问限定符有`public`、`protected`、`private`,实现封装。类有独立作用域,实例化是创建对象过程。类对象大小由成员变量决定,空类占1字节。`this`指针是成员函数隐藏参数,指向当前对象,类型为类类型* const,只能在成员函数内使用。掌握这些可助于用C++进行面向对象编程。
2025-05-19 21:57:12
1701
原创 C++ 命名空间深度解析:避免命名冲突
C++命名空间用于解决全局作用域下的命名冲突,通过`namespace`将标识符封装在独立作用域。其可嵌套、合并,成员需通过`::`或`using`访问。使用方式包括作用域限定符、`using`声明(引入单个成员)和`using namespace`(展开全部成员)。命名冲突解决方案有封装到命名空间、重命名、`static`限制等。作用域解析遵循“局部→全局→展开命名空间→显式指定”顺序,`::`可访问全局或命名空间成员。实践中避免头文件全局展开,优先局部引入,命名采用项目模块组合降低冲突。
2025-05-19 00:23:02
1352
1
原创 从 DevC++ 到 VS 的转型之路:解决 VS 编译器中scanf报错的保姆级教程
从DevC++转向Visual Studio(VS)时,新手常因`scanf`函数报错受阻。VS出于安全考量默认禁用`scanf`,以规避缓冲区溢出风险。本文提供四种解决方案:改用安全函数`scanf_s`、通过项目设置或预处理指令`#define _CRT_SECURE_NO_WARNINGS`禁用警告,以及修改VS模板文件自动添加指令,助力开发者在VS中合理使用`scanf`,筑牢安全编程意识。
2025-05-18 16:04:03
1998
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅