- 博客(22)
- 收藏
- 关注
原创 【Linux】进程(二)——进程状态(僵尸进程、孤儿进程)、前后台进程、进程优先级
本文摘要: 文章系统讲解了进程状态及其在Linux中的实现。基础状态包括运行态(CPU执行)、就绪态(等待调度)和阻塞态(等待事件)。阻塞本质是进程从CPU队列移至硬件等待队列,事件完成后再移回。Linux扩展了状态模型:R(运行)、S(可中断阻塞)、D(不可中断阻塞)、T(暂停)、Z(僵尸)、X(死亡)。重点分析了僵尸进程(Z态)的危害——内存泄漏,需由父进程回收task_struct。此外介绍了挂起机制(缓解内存压力)和OOM Killer(内存不足时强制终止进程)。通过代码演示了僵尸进程的产生与检测方
2026-05-13 12:58:05
325
1
原创 【Linux】进程(一)——进程理解、进程查看、如何运行多个进程
本文介绍了Linux系统中进程的基本概念和管理方法。主要内容包括:1)进程与程序的区别,进程是运行中的程序,由内核数据结构task_struct和代码数据组成;2)进程状态(运行态、睡眠态、僵尸态等)及其转换;3)进程信息查看方法,包括/proc文件系统、top/htop和ps命令;4)通过代码示例演示了单进程运行、进程阻塞状态以及使用fork()创建子进程的过程。文章通过理论讲解与实操结合的方式,帮助读者理解Linux进程管理的核心概念和基本操作。
2026-05-10 13:27:56
423
2
原创 冯・诺依曼体系
本文介绍了冯・诺依曼计算机体系结构和操作系统的基本原理。冯・诺依曼体系通过内存作为缓冲层,解决了CPU与输入输出设备速度不匹配的问题,形成"CPU只与内存交互"的核心原则。操作系统作为计算机的"大管家",负责管理硬件资源、内存分配、进程调度等核心功能,并为用户程序提供执行环境。文章详细阐述了内存的缓存作用和局部性原理,解释了操作系统通过"先描述再组织"的方式高效管理系统资源,并以QQ聊天为例说明了数据在计算机中的流动过程。最后简要介绍了计算机启动时
2026-05-09 19:15:02
458
2
原创 【linux】Shell 原理与用户权限解析
如果文件拥有者设为 rw-,所属组设为 r–,你既是拥有者又是所属组用户,按顺序验证身份你会被分到拥有者身份,只会按文件拥有者rw-权限执行(身份只验证一次)
2026-04-07 19:07:04
426
4
原创 Linux基本指令
参数全称作用常用组合-llong长格式显示,显示权限、属主、大小、时间等详细信息(ll 就是它的别名)ls -l-aall显示所有文件,包括 . 开头的隐藏文件(比如 .bashrc、.git)ls -la-ddirectory只显示目录本身,不展开目录内的文件ls -ld 目录名-h人性化显示文件大小(KB/MB/GB,替代纯字节)-ttime按文件修改时间排序,最新的在最上面ls -lt-rreverse倒序排序(配合 -t 用,最老的在最上面)
2026-04-03 17:27:12
369
2
原创 C++继承
C++继承是面向对象编程的核心特性,允许派生类复用基类的公共成员,避免代码冗余。摘要要点: 继承解决了类之间的共性代码复用问题,形成"is-a"关系,如Student和Teacher继承Person类。 继承方式(public/protected/private)决定基类成员在派生类中的访问权限,public继承最常用。基类private成员始终不可见。 派生类对象可向上转型为基类(切片/指针/引用),但基类不能向下转型为派生类。 同名成员会隐藏基类成员,需通过类域显式访问。派生类默认成
2026-03-14 19:56:59
371
2
原创 C++模板进阶
C++模板进阶摘要 本文深入探讨C++模板的高级应用,主要包括非类型模板参数和模板特化两大主题。非类型模板参数允许使用常量作为模板参数,实现固定大小的容器如Stack和std::array。文章详细介绍了非类型参数的限制,必须是编译期常量且类型受限。 模板特化部分讲解了如何为特定类型定制模板实现。函数模板特化需要遵循严格的语法规则,而类模板特化分为全特化和偏特化。全特化针对所有模板参数指定具体类型,偏特化则可部分特化或对参数类型施加限制(如指针/引用类型)。这些技术能解决通用模板在特殊类型下的异常行为,提升
2026-03-10 09:48:16
379
2
原创 C++ 标准模板库(STL)——priority_queue和heap的使用和底层实现
本文介绍了C++ STL中的priority_queue和heap数据结构。priority_queue是容器适配器,默认使用vector作为底层容器,通过仿函数控制排序方式(默认大顶堆)。文章讲解了priority_queue的基本操作和使用方法,并详细分析了仿函数的实现原理。随后深入探讨了heap的底层特性,包括完全二叉树结构、大/小根堆定义以及核心操作算法(向下调整、向上调整和建堆),最后给出了大根堆的C++实现代码,包含插入、删除等基本操作。这些内容为理解和使用优先级队列和堆数据结构提供了实用指导。
2025-11-21 16:30:17
841
2
原创 C++ 标准模板库(STL)——stack、queue、deque的使用和底层原理
(node就是中控区数组的某个元素,当前元素的值是当前内存块的地址)
2025-11-19 19:36:31
654
3
原创 C++标准模板库(STL)——list的模拟实现
通过模板参数实例化,分别得到普通迭代器和 const 迭代器之前的 _list_iterator<T, Ref, Ptr> 是 “通用模板”(图纸),三个参数都是占位符。现在通过 typedef给模板传了 “具体参数”,直接生成两个 “专用迭代器类型"class listpublic://重命名变成我们熟知的普通迭代器和const迭代器//普通迭代器:Ref=T&,Ptr=T*// const迭代器:Ref=const T&,Ptr=const T*
2025-11-16 15:42:56
1162
4
原创 C++标准模板库(STL)——vector的使用
当插入元素后size>capacity时,空间不足,vector就会触发扩容。系统会分配一块更大的空间(按原容量的1.5或2倍扩充),并将原数据拷贝到新空间,释放旧空间。此时所有的迭代器、指针、引用都会失效,接下来我会粗略地介绍vector类一些常用成员,同时为了讲解方便,本文先以储存int类型为例介绍常用接口,如果大家想了解更多,可以点开上面的链接查阅。vector的使用和string非常相似,所以本文将减少文字说明,多用代码介绍。,vs下capacity是按1.5倍增长的,g++是按2 倍增长的。
2025-11-04 20:31:46
1114
4
原创 C++ string的使用
本文介绍了C++中string类的使用方法和相关特性。主要内容包括: auto关键字和范围for循环的用法,auto用于自动类型推导,范围for简化容器遍历。 string类的基本概念,它是动态字符数组,自动管理内存。介绍了string的多种构造方法。 string的容量操作,如size()/length()获取长度,resize()调整大小,capacity()查看容量等。 迭代器的使用,包括正向/反向遍历字符串的方法。 字符串修改操作,如operator[]访问字符,push_back()追加字符,ap
2025-10-30 15:41:36
644
4
原创 C++浅谈模板
摘要:本文介绍了C++模板机制在泛型编程中的应用。首先通过交换函数的重载问题引出泛型编程概念,随后详细讲解了函数模板的语法、原理及实例化方式(隐式/显式)。文章还探讨了模板函数与普通函数的匹配优先级规则,最后介绍了类模板的定义与实例化方法。模板机制通过类型参数化实现了代码复用,使开发者能编写与类型无关的通用代码,同时保持类型安全。
2025-10-28 17:37:56
337
5
原创 c/c++内存管理
本文介绍了C/C++内存管理的核心知识。主要内容包括:1)程序内存分区(栈、堆、代码段、数据段)及其存储内容;2)C语言动态内存管理方式(malloc/calloc/realloc/free)的使用和注意事项;3)C++特有的new/delete操作符及其与malloc/free的区别;4)定位new的用法及其在内存池中的应用;5)operator new/delete函数的作用机制。文章通过代码示例详细说明了各种内存管理方式的使用方法,并特别强调了内存泄漏和野指针的防范措施。
2025-10-28 17:04:20
925
原创 C++类和对象(二)
类外初始化静态成员是C++语法规定的特殊情况,这种初始化语法int A::_scount =0;是编译器认可的特殊形式,
2025-10-21 13:59:47
1039
1
原创 C++类和对象(一)
我们先来看一段类的定义class Datepublic:/成员函数_day = day;private:/成员变量,为了区分成员变量和其他变量,可以在成员变量前加_int _year;int _month;int _day;其中class为类的关键字,Date为类的名字,{}中为类的主体,最后以”;”结尾。类体中的变量称为成员变量,类中的函数称为成员函数定义在类里面的成员函数默认为inlineC++中struct也可以定义类(兼容C中struct的同时拓展功能)
2025-09-23 19:08:26
647
1
原创 C++入门(零C++基础也能看懂)
namespace后面跟命名空间的名字,再加上一对{},就是命名空间的格式了。{}中即为命名空间的成员,命名空间中可以定义变量、函数、类型等/test就是命名空间名/命名空间中可以定义变量、函数、类型int a = 0;int val;namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2025-06-28 21:21:47
1086
3
原创 解决VS2022报错scanf问题
如scanf读取字符串时没有正确限制输入长度,可能会导致超出目标缓冲区的大小,从而引发安全漏洞,因此在VS中scanf函数被认为是不安全的函数。当然是有的,下面的方法也是我最推荐的。),在桌面上找到文件在记事本中打开,并输入。,找到VS相关路经的文件,右击该文件名称,再点击打开路径,此时来到以下界面。,在其他编译器(GCC、Clang、MinGW)仍在使用scanf。为了代码有更好的跨平台兼容性,也为了养成良好的编码习惯,小编推荐使用。可以重复上述步骤,但在VS打开桌面文件,在里面添加。
2025-03-18 17:41:26
672
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅