<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a19767939的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a19767939</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a19767939]]></copyright><item><title><![CDATA[linux进程信号 ---- 信号的产生]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/140037200</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/140037200</guid><author>a19767939</author><pubDate>Fri, 28 Jun 2024 23:17:12 +0800</pubDate><description><![CDATA[首先我们说一下生活中的信号，比如红绿灯，我们对红绿灯的不同颜色时会进行不同的动作，他向我们传递了红灯绿灯的信号，我们会对不同的信号做出不同的反应，即红灯行绿灯停，我们为什么会知道红灯行绿灯停呢？原因是我们从小接受的教育是这样，如果一位一直在大山中生活的人突然来到城市，他是不会知道红灯停绿灯行的概念的，即我们认识信号，并知道应该进行相应的动作，这就是信号的识别。]]></description><category></category></item><item><title><![CDATA[进程间通信----共享内存]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/139870753</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/139870753</guid><author>a19767939</author><pubDate>Fri, 21 Jun 2024 22:49:09 +0800</pubDate><description><![CDATA[进程间通信的首要前提是,两个进程需要看到同一份资源,这份资源可以是一份文件或者一块内存,文件即管道,这次来聊一下被多进程都可以看到的内存快----共享内存]]></description><category></category></item><item><title><![CDATA[进程间通信 -- 管道(匿名管道,命名管道)]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/139864029</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/139864029</guid><author>a19767939</author><pubDate>Fri, 21 Jun 2024 17:54:55 +0800</pubDate><description><![CDATA[在进程地址空间那篇博客中提到,进程具有独立性,一个进程的崩溃不会影响其他进程,那怎么该让两个进程之间相互通信呢?首先我们要有一个共识,进程间想要相互通信的前提是,两个进程要先看到同一份资源,这份资源可以是一个文件或者一块内存(共享内存,下篇博客写),我们试想一下,A进程先打开一份文件,B进程再打开这份文件,A进程往文件中写入后,B文件再向其读取,这样是不是就可以让两个进程看到同一份资源并进行通信了呢?]]></description><category></category></item><item><title><![CDATA[图解文件系统]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/139547965</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/139547965</guid><author>a19767939</author><pubDate>Sat, 08 Jun 2024 18:45:59 +0800</pubDate><description><![CDATA[在我们安装操作系统时,很多时候会格式化磁盘并分区,比如分成C盘和D盘,分为100G和400G,但是操作系统直接管理100GB也是非常庞大的工作量,所以。]]></description><category></category></item><item><title><![CDATA[图解磁盘结构,磁盘寻址,LBA,CHS]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/139546271</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/139546271</guid><author>a19767939</author><pubDate>Sat, 08 Jun 2024 16:09:40 +0800</pubDate><description><![CDATA[每两个同心圆中间的区域就是磁道,磁盘将每个磁道划分了几个扇形区域,每个磁道中的那一小块扇形就是扇区,每个扇区都可存储512字节,看到这你应该会疑问,很明显,外侧扇区要比内侧扇区看起来大的多,怎么都是存储512字节呢,这不造成外侧空间的浪费吗. 是的,你的疑问没有错,磁盘早期确实这样造成了浪费,但是现在已经没有了这种问题,现在磁盘为了提升容量的同时节约成本,外侧扇区就比较大一些,内侧扇区小一些,已经没有了这种问题]]></description><category></category></item><item><title><![CDATA[进程等待,进程替换,简易shell命令行编写]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/139160819</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/139160819</guid><author>a19767939</author><pubDate>Fri, 24 May 2024 04:35:02 +0800</pubDate><description><![CDATA[之前写了进程的虚拟地址空间之后,再次梳理了一下进程替换和进程等待的知识点,并以一个小demo,加以巩固。]]></description><category></category></item><item><title><![CDATA[linux进程地址空间]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/139029265</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/139029265</guid><author>a19767939</author><pubDate>Sat, 18 May 2024 21:29:49 +0800</pubDate><description><![CDATA[首先引入一个概念，叫虚拟地址空间，在学习C/C++时，一般都会讲局部变量存放在栈上，malloc / new出来的变量存放在堆上,这个栈/堆,事实上并不是物理内存上,而是虚拟地址空间,每个进程,都有属于自己的虚拟地址空间,大致如图]]></description><category></category></item><item><title><![CDATA[C语言可变参数]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/136720085</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/136720085</guid><author>a19767939</author><pubDate>Thu, 14 Mar 2024 20:21:26 +0800</pubDate><description><![CDATA[最近学习linux系统编程，看到很多函数都有可变参数，就想了解一下可变参数具体怎么实现的，在网上找了几个文章，都不怎么易懂，结合他们写的以及去看源码实现，才彻底理解，写下这篇博客，以后自己忘了再来看看前提小知识: 函数参数是从右往左依次压入栈的,最低地址cnt,最高地址为函数最后一个参数。]]></description><category></category></item><item><title><![CDATA[AVL树超详细图解及C++实现]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135883442</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135883442</guid><author>a19767939</author><pubDate>Sat, 27 Jan 2024 17:30:20 +0800</pubDate><description><![CDATA[AVL树，又名高度平衡搜索树，他会一直保证树的左右子树高度不超过1，一旦超过，就会进行调整，本篇博客采用平衡因子法，主要来讲如何用平衡因子控制平衡，以及AVL树的代码实现
首先介绍一下平衡因子，他存在于每个节点当中，当高度平衡时，平衡因子为0，左子树高1，那么平衡因子-1，右子树高1，平衡因子+1，例如图中这棵树]]></description><category></category></item><item><title><![CDATA[C++ 红黑树插入，红黑树迭代器实现]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135870170</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135870170</guid><author>a19767939</author><pubDate>Fri, 26 Jan 2024 17:41:42 +0800</pubDate><description><![CDATA[红黑树的节点需要三叉链用于访问parents，插入时手首先按照搜索树的规则进行插入，在创好新节点并连接后，默认新节点的颜色为红，如果parents的颜色为红，需要进行调整，因为破坏了规则一，一定不能将新节点颜色调为黑，因为破坏了规则三，这样每条路径都要进行调整，而破坏规则一只需调整一条路径，调整时会有三种情况。再将grandfather变为红，parents变为黑，黑节点数量依旧不变，同样没有连续的红节点，变色后如图。此时需要将parents先进行一次旋转，旋转后如图。]]></description><category></category></item><item><title><![CDATA[C++多态----虚函数,虚指针,虚表,内存剖析]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135567380</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135567380</guid><author>a19767939</author><pubDate>Sun, 14 Jan 2024 10:19:49 +0800</pubDate><description><![CDATA[虚表其实在编译时就已经由编译器所创建好了,只是在运行到创建对象时将虚表的地址赋值给vfptr,我们看到的是vfptr有两个成员,第零个因为student重写过了,所以覆盖掉了继承下来的虚函数,为什么说这个操作时覆盖呢,原因是派生类会将基类的表继承下来,两个类共用相同函数地址的虚表,看以下图片两个vfptr中函数的地址可以看出]]></description><category></category></item><item><title><![CDATA[C++多继承,虚继承,虚基类,内存剖析]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135566248</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135566248</guid><author>a19767939</author><pubDate>Sat, 13 Jan 2024 11:01:28 +0800</pubDate><description><![CDATA[他们分别是8，-4，-12的补码，也就是说虚继承的对象会在其他数据里多增加一份地址，地址存放的是对多继承对象的偏移量，这样就可以直接使用_a,解决二义性的问题,且所有继承的派生类都使用这一份_a数据,解决了数据冗余的问题,这样继承下来的类,就叫做虚基类。可以看到的是除_a以外其他的数据上方都有额外的四个字节去存储了一个地址，这个地址所指向的是偏移量，是对多继承_a的偏移量，下面是三个地址里所存储的偏移量。我们发现对象创建后相比之前多了一些标红的东西，这是一个内存地址。下图是所有数据初始化赋值后的内存布局。]]></description><category></category></item><item><title><![CDATA[C++适配器 priority_queue && queue && stack 模拟实现(初阶)]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135435035</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135435035</guid><author>a19767939</author><pubDate>Sun, 07 Jan 2024 03:38:37 +0800</pubDate><description><![CDATA[【代码】C++适配器 priority_queue && queue && stack 模拟实现(初阶)]]></description><category></category></item><item><title><![CDATA[C++ list模拟实现(初阶)]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135353873</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135353873</guid><author>a19767939</author><pubDate>Wed, 03 Jan 2024 06:16:28 +0800</pubDate><description><![CDATA[【代码】C++ list模拟实现(初阶)]]></description><category></category></item><item><title><![CDATA[C++ vector容器模拟实现(初阶)]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135299309</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135299309</guid><author>a19767939</author><pubDate>Fri, 29 Dec 2023 21:59:15 +0800</pubDate><description><![CDATA[【代码】C++ vector容器模拟实现(初阶)]]></description><category></category></item><item><title><![CDATA[C++ string容器模拟实现(初阶,不含分配器)]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/135273886</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/135273886</guid><author>a19767939</author><pubDate>Thu, 28 Dec 2023 17:01:47 +0800</pubDate><description><![CDATA[【代码】C++ string容器模拟实现(初阶,不含分配器)]]></description><category></category></item><item><title><![CDATA[C++,new,opeator new,malloc & delete, opeator delete, free之间的关系]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/134862659</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/134862659</guid><author>a19767939</author><pubDate>Thu, 07 Dec 2023 21:11:58 +0800</pubDate><description><![CDATA[这是两段完整的delete 汇编代码,可以看到他释放对象时只调用了对象的析构函数,并没有调用free or operator delete,当然也可能是编译器不同,我的测试环境为VS2022,理论上来讲他应该是像内置类型一样,先析构再调用operator delete 然后operator delete内部 再调用free,或许是编译器做了什么优化导致他并没有这么做]]></description><category></category></item><item><title><![CDATA[C++多态----虚函数初级剖析]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/126674047</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/126674047</guid><author>a19767939</author><pubDate>Sat, 03 Sep 2022 10:46:19 +0800</pubDate><description><![CDATA[多态说白了就是多种形态,在C++中不少的函数都可以实现多种形态,例如函数重载,运算符重载等等,这种重载一般都是在编译阶段时就已经确定了形态,这种多态,我们一般称之为静态多态,那么既然静态多态是在编译阶段就已经确定好了形态,那么动态多态,自然也就是在运行时才确定形态]]></description><category></category></item><item><title><![CDATA[C语言---快速排序实现三种方法 ---- 挖坑法----递归求解(含三数取中)]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/125835290</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/125835290</guid><author>a19767939</author><pubDate>Sun, 17 Jul 2022 19:26:54 +0800</pubDate><description><![CDATA[顾名思义,挖坑法,首先要有一个"坑",现在我们将第一个数字取出放到key中,现在6这个位置就是一个可以被覆盖的位置,也就是一个坑位,设开始位置为begin,末尾位置为end,现在我们从end找比key小的数字,也就是2的这个位置开始找,2比6小.那么就将2移动到6的位置上,变为:...]]></description><category></category></item><item><title><![CDATA[C语言题目,指定删除数组中的同一个数字]]></title><link>https://blog.youkuaiyun.com/a19767939/article/details/125340856</link><guid>https://blog.youkuaiyun.com/a19767939/article/details/125340856</guid><author>a19767939</author><pubDate>Fri, 17 Jun 2022 22:01:02 +0800</pubDate><description><![CDATA[题目要求,指定一个数字,将数组中和他相同的所有数字删除,时间复杂度为O(N).空间复杂度为O(1) ,并且不可另开辟数组,函数最后返回剩余数组长度解题思路:假设要删除的数字为3首先看这张图:我们可以先试想一下,当src等于3的时候,那么就要让后面的数字覆盖掉3,这就代表,当src遇到3时必须记录一下3的位置,再让src++找到不是3的元素,最后进行替换,dest就起到这么一个记录作用,当src不等于3时,那么dest = src,并且dest++,src++,当src等于3时,dest不动,src++指向后]]></description><category></category></item></channel></rss>