自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 linux进程信号 ---- 信号的产生

首先我们说一下生活中的信号,比如红绿灯,我们对红绿灯的不同颜色时会进行不同的动作,他向我们传递了红灯绿灯的信号,我们会对不同的信号做出不同的反应,即红灯行绿灯停,我们为什么会知道红灯行绿灯停呢?原因是我们从小接受的教育是这样,如果一位一直在大山中生活的人突然来到城市,他是不会知道红灯停绿灯行的概念的,即我们认识信号,并知道应该进行相应的动作,这就是信号的识别。

2024-06-28 23:17:12 839

原创 进程间通信----共享内存

进程间通信的首要前提是,两个进程需要看到同一份资源,这份资源可以是一份文件或者一块内存,文件即管道,这次来聊一下被多进程都可以看到的内存快----共享内存

2024-06-21 22:49:09 718

原创 进程间通信 -- 管道(匿名管道,命名管道)

在进程地址空间那篇博客中提到,进程具有独立性,一个进程的崩溃不会影响其他进程,那怎么该让两个进程之间相互通信呢?首先我们要有一个共识,进程间想要相互通信的前提是,两个进程要先看到同一份资源,这份资源可以是一个文件或者一块内存(共享内存,下篇博客写),我们试想一下,A进程先打开一份文件,B进程再打开这份文件,A进程往文件中写入后,B文件再向其读取,这样是不是就可以让两个进程看到同一份资源并进行通信了呢?

2024-06-21 17:54:55 730

原创 图解文件系统

在我们安装操作系统时,很多时候会格式化磁盘并分区,比如分成C盘和D盘,分为100G和400G,但是操作系统直接管理100GB也是非常庞大的工作量,所以。

2024-06-08 18:45:59 914

原创 图解磁盘结构,磁盘寻址,LBA,CHS

每两个同心圆中间的区域就是磁道,磁盘将每个磁道划分了几个扇形区域,每个磁道中的那一小块扇形就是扇区,每个扇区都可存储512字节,看到这你应该会疑问,很明显,外侧扇区要比内侧扇区看起来大的多,怎么都是存储512字节呢,这不造成外侧空间的浪费吗. 是的,你的疑问没有错,磁盘早期确实这样造成了浪费,但是现在已经没有了这种问题,现在磁盘为了提升容量的同时节约成本,外侧扇区就比较大一些,内侧扇区小一些,已经没有了这种问题

2024-06-08 16:09:40 807

原创 进程等待,进程替换,简易shell命令行编写

之前写了进程的虚拟地址空间之后,再次梳理了一下进程替换和进程等待的知识点,并以一个小demo,加以巩固。

2024-05-24 04:35:02 905 1

原创 linux进程地址空间

首先引入一个概念,叫虚拟地址空间,在学习C/C++时,一般都会讲局部变量存放在栈上,malloc / new出来的变量存放在堆上,这个栈/堆,事实上并不是物理内存上,而是虚拟地址空间,每个进程,都有属于自己的虚拟地址空间,大致如图

2024-05-18 21:29:49 790

原创 C语言可变参数

最近学习linux系统编程,看到很多函数都有可变参数,就想了解一下可变参数具体怎么实现的,在网上找了几个文章,都不怎么易懂,结合他们写的以及去看源码实现,才彻底理解,写下这篇博客,以后自己忘了再来看看前提小知识: 函数参数是从右往左依次压入栈的,最低地址cnt,最高地址为函数最后一个参数。

2024-03-14 20:21:26 240

原创 AVL树超详细图解及C++实现

AVL树,又名高度平衡搜索树,他会一直保证树的左右子树高度不超过1,一旦超过,就会进行调整,本篇博客采用平衡因子法,主要来讲如何用平衡因子控制平衡,以及AVL树的代码实现首先介绍一下平衡因子,他存在于每个节点当中,当高度平衡时,平衡因子为0,左子树高1,那么平衡因子-1,右子树高1,平衡因子+1,例如图中这棵树

2024-01-27 17:30:20 609 1

原创 C++ 红黑树插入,红黑树迭代器实现

红黑树的节点需要三叉链用于访问parents,插入时手首先按照搜索树的规则进行插入,在创好新节点并连接后,默认新节点的颜色为红,如果parents的颜色为红,需要进行调整,因为破坏了规则一,一定不能将新节点颜色调为黑,因为破坏了规则三,这样每条路径都要进行调整,而破坏规则一只需调整一条路径,调整时会有三种情况。再将grandfather变为红,parents变为黑,黑节点数量依旧不变,同样没有连续的红节点,变色后如图。此时需要将parents先进行一次旋转,旋转后如图。

2024-01-26 17:41:42 306 1

原创 C++多态----虚函数,虚指针,虚表,内存剖析

虚表其实在编译时就已经由编译器所创建好了,只是在运行到创建对象时将虚表的地址赋值给vfptr,我们看到的是vfptr有两个成员,第零个因为student重写过了,所以覆盖掉了继承下来的虚函数,为什么说这个操作时覆盖呢,原因是派生类会将基类的表继承下来,两个类共用相同函数地址的虚表,看以下图片两个vfptr中函数的地址可以看出

2024-01-14 10:19:49 329 1

原创 C++多继承,虚继承,虚基类,内存剖析

他们分别是8,-4,-12的补码,也就是说虚继承的对象会在其他数据里多增加一份地址,地址存放的是对多继承对象的偏移量,这样就可以直接使用_a,解决二义性的问题,且所有继承的派生类都使用这一份_a数据,解决了数据冗余的问题,这样继承下来的类,就叫做虚基类。可以看到的是除_a以外其他的数据上方都有额外的四个字节去存储了一个地址,这个地址所指向的是偏移量,是对多继承_a的偏移量,下面是三个地址里所存储的偏移量。我们发现对象创建后相比之前多了一些标红的东西,这是一个内存地址。下图是所有数据初始化赋值后的内存布局。

2024-01-13 11:01:28 348 1

原创 C++适配器 priority_queue && queue && stack 模拟实现(初阶)

【代码】C++适配器 priority_queue && queue && stack 模拟实现(初阶)

2024-01-07 03:38:37 351 1

原创 C++ list模拟实现(初阶)

【代码】C++ list模拟实现(初阶)

2024-01-03 06:16:28 405 1

原创 C++ vector容器模拟实现(初阶)

【代码】C++ vector容器模拟实现(初阶)

2023-12-29 21:59:15 331 1

原创 C++ string容器模拟实现(初阶,不含分配器)

【代码】C++ string容器模拟实现(初阶,不含分配器)

2023-12-28 17:01:47 381 1

原创 C++,new,opeator new,malloc & delete, opeator delete, free之间的关系

这是两段完整的delete 汇编代码,可以看到他释放对象时只调用了对象的析构函数,并没有调用free or operator delete,当然也可能是编译器不同,我的测试环境为VS2022,理论上来讲他应该是像内置类型一样,先析构再调用operator delete 然后operator delete内部 再调用free,或许是编译器做了什么优化导致他并没有这么做

2023-12-07 21:11:58 395

原创 C++多态----虚函数初级剖析

多态说白了就是多种形态,在C++中不少的函数都可以实现多种形态,例如函数重载,运算符重载等等,这种重载一般都是在编译阶段时就已经确定了形态,这种多态,我们一般称之为静态多态,那么既然静态多态是在编译阶段就已经确定好了形态,那么动态多态,自然也就是在运行时才确定形态

2022-09-03 10:46:19 293 1

原创 C语言---快速排序实现三种方法 ---- 挖坑法----递归求解(含三数取中)

顾名思义,挖坑法,首先要有一个"坑",现在我们将第一个数字取出放到key中,现在6这个位置就是一个可以被覆盖的位置,也就是一个坑位,设开始位置为begin,末尾位置为end,现在我们从end找比key小的数字,也就是2的这个位置开始找,2比6小.那么就将2移动到6的位置上,变为:...

2022-07-17 19:26:54 489

原创 C语言题目,指定删除数组中的同一个数字

题目要求,指定一个数字,将数组中和他相同的所有数字删除,时间复杂度为O(N).空间复杂度为O(1) ,并且不可另开辟数组,函数最后返回剩余数组长度解题思路:假设要删除的数字为3首先看这张图:我们可以先试想一下,当src等于3的时候,那么就要让后面的数字覆盖掉3,这就代表,当src遇到3时必须记录一下3的位置,再让src++找到不是3的元素,最后进行替换,dest就起到这么一个记录作用,当src不等于3时,那么dest = src,并且dest++,src++,当src等于3时,dest不动,src++指向后

2022-06-17 22:01:02 314 1

原创 C语言题目:只出现一次的两个数字

题目详情:给定一个arr数组,在这个数组里,有两个数字只出现了一次,其余数字均出现两次,请找出这两个数字,要求时间复杂度小于O(N),空间复杂度小于O(1)首先我们应该思考如何才能准确的区分开这两个数字,假设这两个数字分别为x1,x2,既然其他元素数字都相同,那么我们完全可以将其它数字直接排除掉,这个时候我们需要用到异或操作符,即二进制下相同的两个数字异或为0.相异为1,符号为^解题思路:首先我们可以将这数组中所有的元素进行异或,那我们得到的数字即两个不同的数字异或后的值,因为其他相同的值异或到一块后已为0

2022-06-15 22:07:48 260 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除