- 博客(39)
- 收藏
- 关注
原创 孤儿进程和僵尸进程
孤儿进程,顾名思义,就是父进程提前终止,但是子进程还在运行中,父进程无法对子进程进行监管,子进程就成为了孤儿进程。僵尸进程就是,子进程运行已经结束,但是父进程没有对其资源回收,导致子进程不能彻底退出,始终停留在Zombie状态。在僵尸状态,进程表中仍然会保留僵尸进程的PCB,占用系统资源。
2025-03-19 22:31:18
449
原创 C++右值引用与移动语义
左值和右值在字面上理解,是放在等号左边的值和放在等号右边的值,但是这种字面上的理解是不正确的,实际上,左值是指可以出现在赋值表达式左侧的表达式,通常表示一个具名的、有内存地址的对象,相反,右值是指只能出现在赋值表达式右侧的表达式,通常是临时的、没有持久内存地址的值。从定义中可以知道,左值和右值的最根本区别就在于是否有值持久的内存。例如:以下代码,a和b都是左值,虽然b不能放在等号左边被修改,但是也属于左值,因为其拥有持久的内存,但是getOne的返回值、2、1是右值,因为其没有持久的内存。
2025-03-19 22:31:09
691
原创 C++菱形继承内存模型
本文讲述了C++类菱形继承的内存模型,菱形模型是C++由于多继承这一特性而产生的一种特殊现象,即继承关系类似于菱形,例如B、C继承于A,D继承于B和C.(注:本文非特别说明,代码测试环境均为vs x86环境)
2025-03-17 22:37:28
298
原创 extern关键字的作用
在c++中,函数是可以重载的,即可以支持函数支持针对不同的参数类型和参数数量进行不同的处理。以vs编译器为例,其实现的原理是,用不同的符号标记不同的参数,在编译阶段使用函数名+返回值类型+参数类型标识拼接的方式形成符号表,这样就可以区分出不同参数类型和参数数量的函数重载。例如,以下重载了两个add函数,两个add函数的参数类型和个数都不相同,编译查看其汇编代码main.asm,可以看到,汇编中有两个add函数,为?和?
2025-03-16 14:05:59
733
原创 Linux——信号的保存与处理
自定义2号信号响应,同时屏蔽3,4,5信号,期间通过kill向该进程发送信号,并且打印未决信号集。sig>0;cout
2025-02-10 13:37:06
634
原创 利用SIGCHLD信号回收子进程资源方案
在上面代码中,自定义17号信号响应为等待,每次子进程退出,执行等待操作,因为在等待的过程中,可能会有其他子进程退出,所以需要循环起来,并且使用不阻塞等待,这样可以最大程度不影响父进程工作并且回收子进程资源。SIGCHLD为17号信号,在子进程退出时被发送给父进程,所以利用这个特性,就可以设计出一个尽可能不影响父进程工作,并且安全回收子进程资源的方案。在创建子进程后,子进程退出时,为了防止子进程成为僵尸进程,父进程需要一直或者间接性等待子进程退出,会大大影响父进程原本的任务。
2025-02-10 13:26:16
229
原创 Linux——进程间通信之SystemV共享内存
SystemV通信一般包括三种:共享内存、消息队列和信号量。共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到 内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。
2025-02-03 23:45:01
768
原创 VScode连接远程Linux服务器环境配置
安装对应的语言包,例如此处安装的是c/c++插件,安装后在写c/c++代码时候会可以自动补齐代码。选择安装位置,一直点击下一步即可。2.3保存连接配置信息。
2025-01-23 09:59:53
1513
原创 基于Linux平台的C++进程池设计
进程池的作用是一次性创建多个进程,再由父进程控制子进程执行的状态,这样的优点在于可以减少多次创建进程的开销。 使用一个父进程创建多个子进程,通过管道通信向子进程发送命令码执行对应的代码。通过 设计一个类channel用于描述进程池中的每一个通道,包括管道的写端fd,进程的pid,以及为了方便调试,为每个通道起一个名称,在类中设计相应的构造函数、析构函数及变量对应的get函数。 设计一个类processPool用于管理进程池,其中包括channels数组用于
2025-01-23 09:59:39
309
原创 Linux——软硬链接
封装库的实质其实是在上面的基础上,将源文件编译为.o文件后,再将头文件和.o文件封装为库。# 使用方法-r:表示如果该库存在,就将其替换-c:表示如果该库不存在,则创建该库使用以上命令,将.o文件封装为静态库,注意,因为main函数是程序的入口,所以在制作库的时候,一定不能将带有main函数的.o文件封装进去。与制作静态库相同,第一步将源文件编译为.o二进制文件,但在编译时,需带上-fPIC,以创建.o文件,其中-fPIC的作用为编译为位置无关码。
2024-12-10 21:42:09
1299
原创 Linux权限管理
1.目录的可执行权限是表示你可否在目录下执行命令。2.如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)3.而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读 权限4.所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档5.权限只对普通用户有作用,root无视权限。
2024-12-10 21:36:32
654
原创 Linux——文件操作
1)在Linux下面,一切皆文件,文件=文件内容+文件属性2)在访问文件是,都得先将文件打开,修改文件的本质其实还是通过执行代码的形式修改。3)文件是被进程打开的,一个进程可以打开多个文件,操作系统会将打开的文件进行管理,被打开的文件被加载到内存中,称为内存文件,未被打开的文件存放在磁盘上,称为磁盘文件。本文对进程和文件之间的关系,以及操作系统如何对文件进行管理。
2024-10-24 13:56:30
1414
原创 C语言中位操作传参的应用
受上述方法的启发,每一个数字需不需要打印其实就是看对应的宏有没有包含该数字,这其中对于每个数字而言,有两种状态,需要打印或者是不需要打印,那么,我们就可以使用一个比特位来表示某个数字是否需要打印,1表示需要打印,0表示不需要打印,且每个数字占且只占一个特定的比特位。在这个代码中,我们只需要定义n个宏,从右往左的第1位表示1的状态,第2位表示2的状态,第3位表示3的状态,第四位表示4的状态...,这四个宏有且只有一位是1,其余位都是0。每次需要打印多个数字,且数字的个数是不确定的,但是每个数字至多出现一次。
2024-10-24 13:56:13
451
原创 Linux下的环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性举例:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
2024-08-11 22:53:45
1130
原创 make与Makefile
本文的内容为Linux下的工程组织管理方案make和makefile以及利用make和makefile实现一个进度条。
2024-07-31 21:48:26
1176
1
原创 Linux下进程的理解(一)
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统 调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。操作系统对硬件管理的本质:先使用结构体将硬件组织起来,再通过数据结构将硬件管理起来,对下进行软硬件进行管理,对上提供一个良好的运行环境,用户不能直接跨过操作系统对硬件进行操作,操作系统提供了各种用户操作接口用,例如库函数等于用于进行开发和操作。通过观察,可以发现,每次启动进程的PID都是变化的,而PPID是不变的。
2024-07-29 12:44:41
1115
1
原创 pytorch深度学习——dataset(附数据集下载)
我们创建一个新文件,起名为demo1.pyimport os我们通过查看文档可知,所有的数据集都应该继承Dataset类,并且子类都必须重写__getitem__方法,该方法的主要作用是获取每一个数据以及其label,也可以选择性重写__len__方法,获取数据集的大小。所以我们定义一个类MyData#构造方法,将文件夹名称以及子文件夹传入#获取数据集中第idx个数据以及其label,我们可以通过索引获取数据对象#获取数据集的长度。
2024-03-23 23:55:06
1960
1
原创 C++模拟实现string类
实现:如果pos+len>_size,则直接将pos位置改为'\0',再修改_size的值,否则直接将pos+len后面位置的元素直接拷贝到pos位置。实现:将_str[_size]位置改为ch,再将后面加上一个'\0'即可,但是要注意扩容问题,以及记得需要修改_size的值。作用:改变字符串的大小至n,并且用字符ch填充字符串后面的内容,若n大于_capacity,则需要对字符串进行扩容操作。实现:如果n<=_size,则将字符串的第n个位置改为'\0'即可,若n>_size,则将后面填充为ch即可。
2024-03-12 09:57:11
771
1
原创 C++命名空间namespace
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。在C++中,为了解决这一问题,C++添加了namespace这一关键字,对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
2024-02-24 16:51:39
2014
1
原创 关于拷贝构造函数的补充
我们想创建一个栈st1,再创建第二个栈st2,并且使用系统默认生成的拷贝构造函数,结果程序崩溃了,其原因是在拷贝时,只有st2将st1中指针的只也拷贝过去,在st2生命周期结束之后,将该空间已经释放了,当st1生命周期结束时,再一次去释放那块空间,但是此时那块空间已经不属于程序,所以st1无权释放该空间。我们发现,两次this指针的地址不一样,说明,fun函数中创建了一个临时对象,然后调用拷贝构造函数利用传过来的对象进行初始化。若函数的参数为类的传值调用时,调用该函数之前会调用参数类的拷贝构造函数。
2024-02-07 01:08:59
303
2
原创 C++类和对象(二)——构造函数与析构函数
接上一期讲了C++类和对象最基础部分,今天我们接上一期讲C++聊聊C++类和对象第二期本期要点:构造函数,析构函数。类实例化的时候,其成员变量储存在对象里面,但是成员函数存放在公共代码区。
2024-02-04 22:55:53
678
1
原创 数据结构——单链表(C语言版)
在数据结构中,单链表是十分重要的一种结构,其最大的存储特点是数据存储不连续,通过指针相连。相比于同为线性表的顺序表,其优势是插入和删除十分简单,其缺点是查找某个节点比较复杂,由于其不是连续存储,所以不能直接用下标。在此文中,讲解了用C语言实现带头节点的单链表。
2024-02-01 21:49:07
810
2
原创 C++类和对象(一)
在解释这个问题之前,我们可以设想一个场景,我们在点外卖的时候,会经过以下的过程:Ⅰ用户在平台下单,商户接单,外卖员进行接单,然后商家开始制作菜品,外卖员取餐后开始送餐,最后将餐送到你的手中。这便一套流程走下来,便是面向过程的思想。Ⅱ在上面的过程中,一共涉及到了三个对象,用户、商家、外卖小哥。其中用户要做的事情就是下单,然后就是等待接收外卖商家要做的是接单,并且准备菜品外卖小哥需要做的事情就是接单,并且配送菜品,这样,三个人各司其职,将外卖送到用它用户手中。这便是面向过程思想。
2024-01-27 23:31:16
874
4
原创 详解C语言实现扫雷游戏
在学习C语言的过程中,我们不光要学会C语言的语法知识,更要学会如何将所学知识运用到我们实际项目当中去,时隔多日,继C语言实现三子棋之后,小杨又来带大家以C语言中的数组与函数两个知识点来实现另一个趣味小游戏——扫雷。我们定义一个结构体来表示一个位置的属性(该位置是否为雷、周围雷的个数、该位置是否已经被扫查);//定义结构体//代表这个位置是否是雷//代表周围一圈雷的个数//表示这个位置是否已经被检查过了}Mine;
2023-09-02 16:26:37
436
12
原创 详解C语言实现三子棋
在学习C语言的过程中,我们不光要学会C语言的语法知识,更要学会如何将所学知识运用到我们实际项目当中去,今天,小杨就以C语言中的数组与函数两个知识点来实现一个趣味小游戏——三子棋。我们定义一个char类型的二维数组board[ROW][COL]来表示一个ROW行、COL列的棋盘,我们这里将ROW定义为3,COL定义为3;//打印菜单//进行游戏//初始化棋盘//打印棋盘//玩家下棋//电脑下棋//判断输赢。
2023-07-26 19:18:49
574
27
原创 详解标准输入输出函数scanf和printf函数——上
scanf和printf函数(标准输入输出函数),是C语言中最为常见的输入输出函数,在使用前,需要引用这个头文件,这是因为scanf和printf函数包含在标准输入输出函数头文件(Standard Input&Output),但由于其被使用得十分频繁,所以为了方便,许多头文件都会直接或间接地包含这个头文件,举个例子,下面是VS2022环境下的报错信息,表示scanf和printf函数未定义代码成功运行,在屏幕上打印0;
2023-06-17 10:36:39
2517
12
原创 初识C语言——1(C语言是什么及其演变历史)
C语言是我们大多数同学掌握的第一门编程语言,但是关于C语言到底是什么 ,大家也可能知识知道它是一门学习起来最简单的编程语言而已。那么这一篇文章,小杨就来带大家重新认识一下C语言。1)语言我们讲到人与动物最大的区别就是人有独特的语言交流系统。多年来,随着人们社会活动的产生,人们在社会生活中就有了交流的必要,于是产生了语言这一交流工具。在后续的人类文明向不同的方向发展,根据不同文明的交流习惯与需求,也就形成不同的人与人之间用于交流的语言,这种用于人与人之间交流的语言我们称之为“自然语言”。
2023-06-12 16:34:17
292
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人