- 博客(16)
- 收藏
- 关注
原创 Linux操作系统:进程状态
本文深入解析操作系统进程状态模型,重点阐述Linux系统的进程状态机制。文章首先介绍操作系统通用的三大基础进程状态(运行态、就绪态、阻塞态)及其队列调度原理,详细区分易混淆概念。随后深入讲解Linux细化的8种进程状态(R/S/D/T/t/X/Z),包括每种状态的特征、触发条件和处理方式,特别分析了僵尸进程和孤儿进程的形成机制及区别。文章强调进程状态判定的核心规则是查看PCB挂载的队列位置,并提供了测试代码和实用命令来观察各种状态。最后总结了进程状态转换规律和内存管理机制,为理解操作系统进程调度提供了系统性
2026-05-13 11:28:59
94
原创 初识进程:时间片与上下文数据
本文介绍了操作系统中的进程概念及其管理机制。进程是运行中的程序实例,由程序代码、数据和内核管理的PCB(进程控制块)组成。Linux系统中,PCB以struct task_struct结构体形式存在,记录进程ID、状态、优先级等关键信息,并通过双向链表组织管理。为实现多任务并发,CPU采用时间片轮转调度算法,每个进程获得短暂执行时间后强制切换。上下文数据保存了进程的运行现场,确保切换后能恢复执行。频繁的进程切换会产生上下文开销,可能导致系统卡顿。Linux通过结构体描述、链表组织、时间片调度和上下文保存机制
2026-05-08 22:34:24
301
原创 [深入理解指针3]:函数指针与回调函数
本文深入解析了C语言中函数指针的核心概念与应用。首先介绍了函数指针变量的创建与类型,通过语法拆解说明其本质是存放函数地址的容器。重点讲解了函数指针数组(转移表)的实现方式及其优势,通过计算器案例对比展示了如何用转移表替代冗余的switch/case结构。文章还深入探讨了回调函数机制,包括其定义、实现原理及在qsort等标准库函数中的应用,阐释了通过函数指针实现代码解耦和灵活扩展的核心价值。最后总结指出,从函数指针变量到回调函数,本质都是围绕"地址"这一核心概念展开的高级编程技术。
2026-05-07 17:22:15
375
原创 [深入理解指针2]:数组与指针、指针数组与数组指针
本文深入讲解了C语言中数组与指针的核心概念及联动用法。主要内容包括:1. 数组名本质是首元素地址,但存在sizeof和&arr两个例外情况;2. 指针访问数组的多种等价写法及底层原理;3. 数组传参的本质是指针传递而非值传递;4. 数组与指针在内存、sizeof等方面的根本区别;5. 指针数组和数组指针的定义、用法及典型应用场景。通过大量代码示例,系统梳理了数组和指针的底层关联,帮助读者彻底掌握数组指针的核心知识点,打通编程中的关键难点。文章最后用七点总结归纳了所有重要概念,形成完整知识闭环。
2026-05-06 21:33:20
468
原创 [深入理解指针1]:指针类型&&野指针
本文深入解析了内存、总线与指针的关系,以及指针类型的核心作用和野指针问题。内存被划分为标准字节单元,CPU通过地址总线访问内存地址,指针本质就是内存地址。指针类型决定了读写权限(如char操作1字节,int操作4字节)和步长(指针加减的字节跨度)。野指针主要由未初始化、越界访问、返回局部变量地址或释放内存后未置空导致,可能引发程序崩溃。规避方案包括:初始化指针、严控数组边界、及时置空指针以及避免返回局部变量地址。理解这些机制对安全高效的内存操作至关重要。
2026-05-06 15:55:54
350
原创 C++11 右值引用与移动语义超全详解
1. 作用:解决模板中「引用嵌套」问题,不让编译报错;2. 核心规则:遇左则左,全右才右;3. 最大价值:给万能引用、完美转发打底,是移动语义全套体系的底层基石。四条折叠规则1)左值引用 + 任意引用 = 左值引用2)只有右值引用 + 右值引用= 右值引用3)只要带&,结果一定是4)全是&&,结果才是&💡 作用:支撑万能引用T&&,既能接左值,又能接右值,为完美转发铺路。六、完美转发1. 遇到的麻烦万能引用T&&接了参数之后,参数变量本身变成左值。
2026-04-27 18:34:58
557
原创 C/C++:类型转换
char、short、int、double 全部都是纯数值类型,底层都是二进制存数,用途都是运算、赋值、传参,属性高度统一。:不同类型能够发生隐式转换,不是随机行为,必须满足同一个条件:底层二进制存储结构相似、数据用途一致。2、内置类型转类:靠单参构造,逻辑上分两步:构造临时对象 + 拷贝构造,编译器会优化为直接构造。:只要类型相似,编译器自动完成类型对齐、自动补齐位数、自动适配精度,不需要手动强转。1、C 语言隐式转换核心:类型底层存储、用途相似,编译器自动转换,C++ 完全兼容。
2026-04-26 13:51:34
383
原创 Git常用命令
本文总结了Git常用命令操作指南,分为四大类:1)仓库创建与基础信息查看,包括初始化、克隆仓库和查看状态、日志等;2)本地仓库操作,涵盖文件暂存、提交和撤销修改;3)分支管理,涉及分支创建、切换、合并和删除;4)远程仓库操作,包括关联远程仓库、推送和拉取代码。重点介绍了git add/commit、分支操作和远程同步等核心功能,帮助开发者快速掌握Git版本控制的基本操作流程。
2026-04-20 10:44:17
169
原创 C/C++:⾃动化构建-make/Makefile
作为C/C++开发者,尤其是面对多文件项目时,Makefile 是提升效率的“神器”——它能自动管理编译流程,避免重复输入冗长的编译命令,还能精准控制编译范围。,它的核心作用是“根据规则,判断哪些文件需要重新编译,然后执行编译命令”。规则也是如此:对比 .o 文件和对应的 .cpp 文件的修改时间,只有 .cpp 文件被修改(Modify 更新),才会重新编译生成 .o 文件。(当前文件已是最新),无法重新编译——哪怕没有删除生成的 .o 文件或可执行文件,只要文件没修改,Make 就不会重新编译。
2026-04-14 15:10:06
375
原创 C/C++编译四步流程:从源码到可执行文件的完整路径
摘要:C/C++程序从源码到可执行文件需经历四个关键步骤:预处理(展开头文件、删除注释等,生成.i文件)、编译(语法检查并转为汇编代码.s文件)、汇编(生成二进制.o文件)和链接(整合库文件生成可执行程序)。预处理不检查语法,编译阶段严格验证代码正确性。链接解决外部依赖,使程序可运行。完整流程可简化为:源码→预处理→编译→汇编→链接。使用gcc/g++命令时默认自动执行全部步骤,生成最终可执行文件。理解这一流程对调试和优化程序至关重要。
2026-04-12 22:52:52
357
原创 Linux权限管理:3大核心问题深度解析
本文详细解析Linux系统的权限管理机制,重点讲解三个核心问题:1. 进入目录的关键在于执行权限(x),而非读权限;2. 文件默认权限664和目录775是由umask值(002)与基础权限(文件666/目录777)计算得出;3. 粘滞位(t)可保护共享目录中的文件,确保用户只能修改自己的文件。文章通过具体测试场景,演示了不同权限组合的效果,并强调目录权限对文件操作的影响。理解这些权限原理,能有效解决日常文件管理和共享中的安全问题。
2026-04-09 17:47:07
332
原创 从一段野指针代码,看懂内存与指针的关系
数据只是被 “释放”,但没有被 “擦除”。就像你退房离开房间,东西还在,只是下一个住户随时会进来换掉。所以:内存本来就是拿来用的,关键是你有没有合法使用权。野指针就是 “没有使用权,但硬要访问”。内存本身没有 “所有权”“权限”“销毁” 这些概念。是局部变量,函数结束就应该被销毁了,为什么还能正常读到值?我在初学时:一直以为指针在 “维护使用内存”。野指针访问 → 没有占坑,但强行使用这块内存。是函数内的局部变量,存储在栈上。执行结束,函数栈帧销毁,这块内存就被。拿到的是一块已经不属于它的地址,属于。
2026-04-08 10:58:52
204
原创 深入 C++ vector:底层原理、构造关联写法、优势与劣势及迭代器失效问题
但vector的构造、reserve、insert等操作可能会改变底层内存(比如扩容、移动元素),导致迭代器指向“无效内存”,这就是迭代器失效——此时使用失效的迭代器(解引用、++/--),会引发程序崩溃或未定义行为,这是使用vector的高频踩坑点,结合前文构造函数和核心接口,重点讲解以下内容。vector的构造函数并非孤立存在,现代C++实现中,核心构造函数(如默认构造)作为基础,其他构造函数(拷贝、移动、迭代器范围构造)均通过“复用底层逻辑+swap交换”实现,既保证高效性,又减少代码冗余。
2026-04-07 15:19:35
292
原创 C++虚函数陷阱
由于调用者是 B 对象,进入 A::test() 后,静态类型为 A*、动态类型为 B* 的 this 指针调用 func (),触发多态,函数体最终绑定到派生类 B 的重写版本。原因:C++ 运行时多态必须通过基类指针或引用调用虚函数,而 A::test() 内部调用 func() 时,本质是通过基类 A 类型的 this 指针完成调用。派生类对象由两部分组成:基类成员部分和派生类新增成员部分。本程序中,p 调用 test() 时,B 类无 test(),因此查找到基类 A 的 test () 并执行。
2026-03-26 15:14:06
194
原创 拷贝构造函数
值传递的本质是:当用实参对象初始化形参时,编译器会先拷贝一份实参对象的副本给形参,而这份拷贝操作本身又会调用拷贝构造函数。深拷贝后,新对象与源对象拥有完全独立的堆内存空间:修改其中一个对象的堆数据不会影响另一个,且析构时各自释放自己的堆内存,避免重复释放问题。引用的本质是对象的 “别名”,引用传递不会创建新的对象副本,仅将形参绑定到实参对象本身,因此不会触发拷贝构造函数,直接打破递归调用链。对于指针类型的成员(如顺序表中指向堆数组的指针),浅拷贝仅复制指针的 “地址”,而非指针指向的堆内存数据。
2026-02-19 21:08:46
337
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅