- 博客(68)
- 收藏
- 关注
原创 【Linux系统】解明进程优先级与切换调度O(1)算法
本文介绍了Linux进程优先级与调度机制。进程优先级由PRI和NI值决定,PRI=80+NI,NI取值范围为-20~19。通过top命令可修改进程nice值来调整优先级。Linux采用O(1)调度算法,使用两个优先级数组(活跃队列和过期队列)实现高效进程切换。活跃队列存放待执行进程,过期队列存放时间片耗尽的进程,通过指针交换实现队列轮转。这种设计结合位图查找和侵入式链表,确保调度时间复杂度为O(1)。文章还解释了竞争、独立、并行和并发等进程相关概念,说明多进程如何在单CPU环境下通过时间片轮转实现并发执行。
2025-11-23 19:05:26
674
31
原创 【Linux系统】掌握进程状态:运行/阻塞/暂停/僵尸/孤儿......
本文详细介绍了Linux系统中的进程状态,包括运行状态(R)、睡眠状态(S)、深度睡眠状态(D)、暂停状态(T/t)、僵尸状态(Z)、死亡状态(X)以及挂起状态。文章解释了每种状态的含义和产生条件,并通过代码示例演示了如何查看和改变进程状态。重点说明了僵尸进程的危害及回收方法,以及孤儿进程如何处理。最后还介绍了内存不足时进程的挂起机制,分析了Swap分区的原理和作用。文章全面系统地讲解了Linux进程管理的核心概念和实际应用场景。
2025-11-20 16:12:40
597
35
原创 【Linux系统】初识OS的进程管理:查看与创建进程
本文介绍了计算机系统的核心概念:首先阐述冯·诺依曼体系结构中CPU、内存、外设的交互关系;然后说明操作系统作为软硬件资源管理者的核心功能;重点讲解了进程的概念,包括进程描述符PCB、查看进程的Linux命令(ps/grep)、父子进程关系(pid/ppid);最后通过fork系统调用示例演示了父子进程的创建与识别机制。全文从硬件架构到系统软件,最后聚焦进程管理,层层递进地揭示了计算机系统的基本工作原理。
2025-11-17 19:35:17
789
56
原创 【C++】现代C++的新特性constexpr,及其在C++14、C++17、C++20中的进化
本文概述了C++11到C++20标准中constexpr关键字的演进过程。从C++11引入constexpr开始,它被用于指定编译期可计算的常量表达式,能优化运行时性能。随着标准更新,constexpr功能不断增强:C++14放宽函数限制,允许局部变量和流程控制语句;C++17支持constexpr修饰lambda表达式;C++20则实现了编译期动态内存分配和虚函数支持等重大改进,使编译期计算能力显著提升。文章通过代码示例和汇编分析展示了各版本特性,体现了constexpr如何逐步模糊编译时与运行时的界限,
2025-11-07 16:11:47
1440
72
原创 【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通
本文介绍了Linux下的程序调试方法,重点讲解了gdb/cgdb调试工具的使用。首先说明debug和release模式的区别,强调需添加-g选项生成可调试版本。文章详细演示了调试命令:启动调试(r)、断点设置(b)、查看变量(p)、单步执行(n/s)等核心功能,并对比了gdb和cgdb的界面差异。还介绍了条件断点设置、变量监视(display/watch)等高级调试技巧,通过示例展示如何设置条件断点(b 10 if i==5)和修改变量值(set var)。这些方法能有效帮助开发者定位和修复代码问题。
2025-11-03 20:27:01
1437
75
原创 【Linux系统】从零掌握make与Makefile:高效自动化构建项目的工具
本文介绍了make与Makefile的基础用法。make是Linux下的自动化构建工具,Makefile则用于定义项目构建规则。文章首先展示了一个简单的Makefile示例,说明如何通过依赖关系和依赖方法编译单个源文件。接着讲解了.PHONY伪目标的作用,它能让命令总是被执行而不受文件时间戳限制。最后介绍了Makefile的高级语法,包括变量定义、通配符匹配等功能,展示了如何利用这些特性高效管理包含大量源文件的项目。通过合理使用Makefile,可以显著提升项目构建效率,特别是在需要频繁修改和重新编译的项目
2025-10-24 21:08:22
1343
83
原创 【Linux系统】带你入门编辑器vim与编译器gcc
《Linux开发工具:vim与gcc基础使用指南》 摘要:本文介绍了Linux环境下两大核心开发工具——vim编辑器与gcc编译器的基本使用方法。vim部分详解了三种常用模式(命令/插入/底行)的切换与功能,包括光标移动、文本编辑、批量操作等实用技巧,并分享了vim配置优化方案。gcc部分则解析了C程序从预处理到链接的完整编译流程(-E/-S/-c选项),对比了动态链接与静态链接的差异,帮助读者掌握高效代码编辑与编译的核心技能。文章配有操作示例与截图,适合Linux初学者快速上手基础开发工具链。
2025-10-20 15:30:13
1478
71
原创 【Linux系统】了解文件权限:看懂rwx与用户管理
本文介绍了Linux系统中的用户分类与文件权限管理。主要内容包括:1)用户分为超级用户(root)和普通用户,通过su命令切换用户;2)文件权限通过rwx字符或八进制数值表示,区分所有者(u)、所属组(g)和其他用户(o)的权限;3)使用chmod修改权限,chown/chgrp修改文件所有者;4)umask控制新建文件的初始权限;5)粘滞位(+t)保护共享目录中的文件不被误删。文章通过具体指令示例,详细说明了Linux权限管理的核心概念和操作方法。
2025-10-10 17:41:17
1300
73
原创 【Linux系统】快速入门一些常用的基础指令
本文介绍了Linux系统中的基础指令,包括文件路径查看(pwd)、用户信息显示(whoami)、清屏(clear)、目录创建(mkdir)、文件创建(touch)、树形结构显示(tree)、路径切换(cd)、文件列表(ls)以及删除操作(rmdir/rm)。重点讲解了绝对路径与相对路径的区别,以及常用选项如-a(显示隐藏文件)、-l(显示详细信息)、-p(递归操作)、-f(强制操作)等的使用方法。这些指令是Linux系统操作的基础,掌握它们能有效提高在命令行环境下的工作效率。
2025-10-02 11:18:27
3362
73
原创 【C++】告别“类型转换”踩坑,从基础到四种核心强制转换方式
C++类型转换探析:从内置到自定义类型的安全转换 本文系统梳理了C++中的类型转换机制,首先回顾了C语言的隐式和强制类型转换,然后重点分析了C++中内置类型与自定义类型之间的相互转换方式。文章详细介绍了C++四种强制类型转换操作符(static_cast、reinterpret_cast、const_cast、dynamic_cast)的特点和使用场景,特别是dynamic_cast在多态类型转换中的应用。通过具体代码示例,展示了如何通过构造函数和类型转换运算符实现类型转换,以及explicit关键字在防止
2025-09-20 21:28:20
1925
73
原创 【C++】C++中内存管理的利器“智能指针”
文章摘要: 本文介绍了C++智能指针的设计原理与应用场景。首先分析了手动管理内存资源的缺陷,提出RAII(资源获取即初始化)的设计思想,通过对象生命周期自动管理资源释放。随后详细讲解了四种标准库智能指针:auto_ptr(已弃用)、unique_ptr(禁止拷贝)、shared_ptr(引用计数)和weak_ptr(解决循环引用)。文章还提供了auto_ptr和unique_ptr的简化实现代码,并着重说明了shared_ptr的引用计数机制。智能指针能有效避免内存泄漏,是C++资源管理的重要工具,需根据场
2025-09-15 20:38:55
2375
62
原创 【C++】特别的程序错误处理方式——异常机制
本文介绍了C++异常处理机制的核心概念与应用。异常处理通过抛出对象实现问题检测与处理的分离,比C语言错误码更灵活。文章详细讲解了异常的抛出与捕获机制、栈展开过程、类型匹配规则、异常重新抛出及安全问题,并介绍了noexcept关键字的作用。异常处理虽强大但也需注意资源泄漏等安全隐患,后续智能指针可解决部分问题。
2025-09-09 23:58:56
1535
28
原创 【C++】C++11的包装器:function与bind简介
本文介绍了C++11中的两个重要工具:std::function和std::bind。std::function是一个通用的函数包装器,可以统一存储各种可调用对象(函数指针、lambda表达式、仿函数等),并支持调用操作。文章通过代码示例展示了如何包装普通函数、lambda和成员函数,特别说明了成员函数包装时需要处理this指针的特殊情况。std::bind则是一个函数适配器,可以调整参数顺序和个数,文章演示了如何用占位符改变参数顺序,以及如何绑定固定参数值,最后展示了如何用bind简化成员函数包装时的th
2025-09-08 23:20:25
993
45
原创 【C++】简单介绍lambda表达式
这篇文章介绍了C++中的lambda表达式,主要内容包括:lambda表达式是匿名函数对象,可定义在函数内部,其类型由编译器生成且唯一;语法结构由捕捉列表、参数列表、返回类型和函数体组成;捕捉列表支持显式/隐式捕捉和混合捕捉,可捕获上下文变量;lambda默认const属性,可用mutable取消常性但不会影响实参;相比函数指针和仿函数,lambda使代码更简洁,常用于排序等场景。通过示例展示了lambda的使用方法和实际应用价值。
2025-09-07 23:43:22
1830
11
原创 【C++】C++11的可变参数模板、emplace接口、类的新功能
可变参数模板是C++11引入的一项重要特性,它允许模板接受任意数量和类型的参数。这一特性极大地增强了C++模板的灵活性和表达能力。可变数目的参数称为参数包,存在两种参数包:模板参数包、函数参数包。我们可以使用操作符去计算参数包中参数的个数。举个栗子:可变参数模板的原理跟模板类似,本质都是去实例化对应类型和个数的多个函数。C++11以后STL容器新增了emplace系列的接口,均为可变参数模板,在功能上兼容push和insert系列,但还有新特点。假设容器存储对象类型为T,emplace还支持直接插入
2025-09-06 16:41:28
1240
39
原创 【C++】C++11的右值引用和移动语义
C++的发展历史上,有许多版本,比如C++98、C++11、C++14,不断更新新的语法。其中,继C++98后,C++11是一个相当重要的版本,更新了许多全新的语法,如右值引用、lambda表达式、function、bind等等,需要我们学习。今天我们首先来学习C++11的右值引用和移动语义。
2025-08-28 18:31:00
1467
36
原创 【C++】封装哈希表模拟实现unordered_set和unordered_map
我们之前学习过了STL中的map和set,它们的底层是红黑树实现的,增删查改的效率在O(n)。除此之外,STL中还有unordered_map、unordered_multimap和unordered_set、unordered_multiset容器,它们的使用方式和map系列和set系列几乎一模一样,所以我们就不用再详细介绍了,详见【C++】来学习使用set和map吧。它们的主要区别在于,unordered_xxx系列容器的底层是由哈希表实现的,上一篇文章我们也详细介绍了哈希表,详见。
2025-08-11 20:38:23
780
8
原创 【C++】论如何封装红黑树模拟实现set和map
本文基于红黑树实现STL中的set和map容器。首先分析STL源码,发现set和map通过红黑树实现,其中set存储key类型,map存储pair<key,value>类型。在红黑树实现中引入Key_Of_T仿函数解决不同类型数据比较问题:set直接返回key,map返回pair的first成员。文章详细展示了红黑树节点的定义、插入操作及旋转平衡处理。通过模板参数K、T和Key_Of_T实现泛型编程,使同一红黑树能同时支持set和map的存储需求,为后续实现迭代器和map的[]操作符重载奠定基础
2025-07-27 11:33:21
2044
38
原创 Java开发实测:用一句话生成一个完整程序(小白也能看懂)
“别怕编程,它比你想象的要简单得多。只要你愿意迈出第一步,飞算AI会陪你走完后面的路。”
2025-07-21 18:02:42
1223
4
原创 【C++】红黑树,详解其规则与插入操作
红黑树是一种自平衡二叉搜索树,通过颜色规则(红黑交替)和旋转操作保持平衡。其核心特性包括:根节点为黑色、红色节点的子节点必须为黑色、每条路径黑色节点数相同。插入新节点时,默认设为红色,若违反规则则通过变色和旋转(单旋/双旋)调整。相比AVL树,红黑树平衡条件更宽松,但同样保证O(logN)操作效率。文章详细介绍了红黑树的结构定义、插入逻辑及四种调整场景的实现方法,并附有代码示例和示意图解析。
2025-07-18 21:49:48
1465
21
原创 【C++】二叉搜索树
上面我们实现的二叉搜索树,结点中只存储了一个key,称为关键码,关键码即为需要搜索的值,使用这种二叉搜索树的场景只需要判断key是否存在。使用这种key/value二叉搜索树的场景,比如英语词典,树的结构中存储key(英文)和value(中文),搜索时输入英文作为key进行查找,找到后输出对应的value中文。使用这种key二叉搜索树的场景,比如小区车库,只有业主的车能进入,车牌号作为key值,就在系统中检查key是否存在以确定是否为业主的车。从名字就能看出来,二叉搜索树主要用于搜索。
2025-06-05 11:09:00
1129
12
原创 【C++】“多态”特性
(运行时)多态是一个继承体系下的类对象,去调用同一函数,而产生不同的行为。比如,Person类为基类,Student类继承了Person类,Soldier类继承了Person类,那么这三类的对象买票行为就有不同的效果。必须是基类的指针类型或引用类型去调用虚函数。被调用的函数必须是虚函数,并且完成了虚函数的重写(覆盖)。我们依次来说明:要实现多态效果,首先必须是基类的指针或引用去调用,因为只有这样才既能指向基类对象又能指向派生类对象(的基类的切片)。
2025-05-29 17:40:21
910
10
原创 【Linux系统】开始认识学习Linux:环境搭建
在开源社区和企业的共同推动下,Linux 迅速迭代并衍生出众多发行版(如 Debian、Red Hat、Ubuntu、CentOS),逐渐在服务器、云计算、嵌入式设备和移动终端(Android)等领域占据主导地位。其开源、模块化和高可定制的特性,不仅打破了商业操作系统的垄断,还成为全球协作开发的典范。但凡使用电子设备,就离不开操作系统,比如Windows、MacOS、鸿蒙。然后,修改密码,重置自己的root密码,记住自己的密码。新建会话,主机处填入刚才的公网ip。大功告成,自此,开始我们的Linux之旅。
2025-05-19 17:31:02
375
1
原创 【落羽的落羽 C++】进一步认识模板
因为在预处理阶段,cpp文件的头文件都会展开,相当于调用所在cpp文件里面就有了声明和定义了。就不会发生链接错误。
2025-05-15 22:15:30
863
4
原创 【落羽的落羽 C++】stack和queue、deque、priority_queue、仿函数
我们之前学习的vector和list,以及下面要认识的deque,都属于STL的容器(containers)组件。而stack和queue,属于STL的配置器(或称为配接器)(adapters)组件,或者归类为容器配置器(container adapters),它们可以修饰容器的接口而呈现出全新的容器性质,即stack的“先进后出”和queue的“先进先出”特点。
2025-05-12 23:18:24
1083
11
原创 【落羽的落羽 C++】内存区域、C++的内存管理
实际上,new的使用是调用了一个全局函数operator new,这个函数的内部其实还是用malloc实现申请空间的,但当malloc申请失败为NULL时,函数不会报错,而是抛异常。new T[n]的原理是,调用operator new[]函数,在这个函数中调用operator new函数完成对n个对象空间的申请,并在申请的空间上执行n次构造函数。new自定义类型的原理是,调用operator new函数申请空间,并在申请的空间上执行构造函数,完成对象的初始化。一言以蔽之,内置类型的申请很好理解。
2025-03-29 15:41:00
873
2
原创 【落羽的落羽 C++】C++入门基础:引用,内联,nullptr
用inline修饰的函数叫做内联函数,编译时C++编译器会在调用函数的地方展开内联函数,这样调用函数时就需要建立栈帧了,可以提高效率。当然,C语言中的宏函数也会在预处理时替换展开,但是宏函数在实现中很复杂容易出错,且不容易调试。,我们本想调用参数是int*的Fun函数,但由于NULL被定义成0,会调用成参数是int的Fun函数;比如,“萨姆”是流萤的别名,“萨姆”就是对流萤的引用,当我们称呼萨姆时,指的仍然是流萤这个人。它继承了宏函数的优点,但没有宏函数的缺点。这两个函数构成了函数重载,编译时没有问题。
2025-03-06 16:54:48
872
1
原创 【落羽的落羽 C++】C++入门基础:输入与输出,缺省参数,函数重载
这一部分知识涉及到后面C++的类和对象的概念,这里我们只能简单理解:直接来看一般使用实例:现在能看懂理解就好,之后我们会深入学习C++的类和对象。缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果我们没有给函数传实参,则函数的形参直接采用这个缺省值,有实参则优先采用实参值。缺省参数分为全缺省和半缺省(有些地方也把缺省参数叫做默认参数)。但是,当函数的声明和定义不再一个文件中时,缺省参数值就不能在声明和定义中同时出现了,规定必须在函数声明中给定缺省值。比如:缺省参数分为全缺省和半
2025-03-04 23:22:51
701
原创 【落羽的落羽 C++】C++入门基础:C++简介,命名空间
C++起源于1979年的贝尔实验室,Bjarne Stroustrup(本贾尼博士)在那里从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,他感受到了现有编程语言(如C语言)在表达能力、可维护性、可扩展性方面的不足。他在1983年在C语言的基础上添加了面对对象编程的特性。设计出了C++的雏形,此时的C++已经有了类、封装、继承等核心概念。随后的几年中,C++在学术界和工业界的应用逐渐增多,一些大学和研究所开始将C++作为教学和科研的首选语言,一些公司开始在产品开发中尝试使用C++。
2025-02-28 23:39:47
1071
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅