it
文章平均质量分 90
几亿少女的梦
这个作者很懒,什么都没留下…
展开
-
共享内存原理及实现通信过程
共享内存原理及实现通信过程共享内存的概念及创建过程共享内存的使用函数使用共享内存完成通信共享内存的概念及创建过程一. 共享内存的概念共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。进程通信的本质就是让两个进程看到同一个空间,所以共享内存就是在物理内存中申请一块空间,然后让通信的每个进程通过进程地址空间与页表完成从物理地址到进程地址空间的映射,然后就可以对该块空间进行修改与读取了。原创 2022-02-14 10:19:11 · 10048 阅读 · 2 评论 -
动静态库详解
动静态库详解认识动静态库动静态库各自的特征如何打包,生成动静态库认识动静态库一. 动静态库的基本原理首先我们先了解一下一个代码转换成程序需要的步骤都有哪些:预处理: 将代码转换成test.i代码 ,还是c语言代码编译: 将test.i转换成汇编语言代码,test.s汇编: 将test.s转换成可重定向的二进制文件(目标文件),test.o链接: 将这些二进制文件链接起来转换成真正意义上的可执行文件。那么库是怎么形成的呢??当我们将代码从test.c变为test.o的时候,我们将这些.o原创 2022-02-08 21:37:20 · 1365 阅读 · 0 评论 -
进程优先级,环境变量与进程地址空间详解
进程优先级,环境变量与进程地址空间详解进程优先级环境变量进程地址空间进程优先级一. 为什么要有优先级??因为操作系统资源是有限的,但是进程是有很多个的,所以我们需要让不同的进程,执行的先后顺序不同,所以就有了优先级,这样可以改善系统资源分配的问题。二. 进程优先级的基本概念CPU资源分配的先后顺序就是指的进程的优先权进程优先权高的有优先执行的权利,配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来就可以把不重要的进程安排到某个CPU中,原创 2022-02-06 09:43:53 · 418 阅读 · 0 评论 -
创建子进程与进程的状态
创建子进程与进程状态创建子进程进程的状态与孤儿进程创建子进程一. 创建子进程的概念:在之前我们了解过,操作系统要对进程进行管理就要先描述再组织,那么操作系统管理的原因是因为内存中存在大量的进程,那么这些进程是怎么来的呢,一部分进程是通过磁盘中的可执行程序运行后,将代码和数据加载到内存中并创建对应的PCB实现创建进程,还有一些可以通过接口来创建进程,这里通过接口创建的进程就是我们今天要将的子进程,它和前面的进程不同的是它的代码部分不是来自硬件而是来自于它的父进程,而创建一个子进程也需要创建一个它对应的P原创 2022-01-29 22:00:26 · 1314 阅读 · 0 评论 -
初识操作系统与进程
初识操作系统与进程初识操作系统进程的粗略了解对linux下的PCB"task_struct"结构体中描述的内容分类粗略解读初识操作系统提到操作系统就不得不提起冯诺依曼体系结构,因为现在我们经常使用的电脑,笔记本都是遵循冯诺依曼体系结构的。那么冯诺依曼体系结构都包括哪几方面呢?冯诺依曼体系结构分为输入设备、输出设备、内存、CPU,其中内存也就是存储器,CPU包括运算器和控制器。是不是听到这几个名词都特别的生疏,其实我们在日常生活中会用到很多,比如输入设备有: 键盘 , 网卡 , 硬盘 , 话筒 ,原创 2022-01-27 20:40:32 · 2291 阅读 · 0 评论 -
平衡二叉搜索树(AVL树)详解
平衡二叉搜索树详解平衡二叉搜索树的概念AVL树的底层实现平衡二叉树底层大概实现的代码平衡二叉搜索树的概念AVL树的概念:二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而原创 2022-01-12 15:34:35 · 1195 阅读 · 0 评论 -
map和set的应用
map与set容器的应用map和set的基本概念map,set的增删查改与遍历multiset与multimapmap和set的基本概念一. map与set的相同首先我们要知道map和set的底层都是通过红黑树实现的,之前我们学过二叉搜索树,因为二叉搜索树当在存储一个有序数列的时候,遍历的时间复杂度就是O(n)并没有体现出树结构在遍历上的优化,所以这里的红黑树就解决了二叉搜索树的这个问题,这里简单的提一下红黑树。红黑树是通过管理树中节点的颜色来将查找的时间复杂度优化为O(logn)的,相比之下红黑树应原创 2022-01-12 10:42:10 · 546 阅读 · 0 评论 -
二叉搜索树详解与实现
二叉搜索树详解与实现二叉搜索树概念二叉树的增删查改K类型二叉搜索树和KV类型二叉搜索树的底层代码实现二叉搜索树概念二叉搜索树又称二叉排序树,它具有以下这几种性质:如果它的左子树不为空,则左子树上所有节点的值都小于根节点的值如果它的右子树不为空,则右子树上所有节点的值都大于根节点的值他的左右子树都是二叉搜索树那么它为什么要叫做二叉排序树呢?因为它的中序遍历就是一个有序的数列,所以我们一般用中序遍历来遍历二叉搜索树,并且也可以使用二叉搜索树的这个特性来检查当前二叉树是否是二叉搜索树。二叉树的原创 2022-01-09 10:37:23 · 597 阅读 · 0 评论 -
C++多态详解
C++中多态详解多态的类型与两个条件二级目录三级目录多态的类型与两个条件一.多态的类型多态分为两种类型分别是静态多态和动态多态静态多态,又称前期多态,其实就是我们认识的函数重载,例如我们最熟悉的cin>>和cout<<就是bian’yi’qi二级目录三级目录...原创 2022-01-08 10:13:43 · 857 阅读 · 0 评论 -
C++中的IO操作
IO操作了解C++中的IO操作C++中的二进制读写,文本读写C++中的stringstream类与I/O操作中对<<与>>运算符的重载了解C++中的IO操作我们学习IO操作,就要先了解什么是IO操作,从名字中就可以看出来,I,O就代表着输入输出的操作,那么这个输入输出和cout和cin有什么区别呢?cout和cin是固定往终端(也就是屏幕输出的),在C++中还有一些接口可以将数据输入输出到其他的文件中,这些就是我们这次要学习的。ifstreamifstream是C++在读原创 2022-01-05 16:30:47 · 2518 阅读 · 0 评论 -
进程替换概念与exec函数
进程替换与exec函数进程替换exec系列函数解读三级目录进程替换一. 概念:进程替换就是指将当前程序替换成一个新的程序,让当前进程执行这个新程序,如果替换成功了,原来的程序就不会被执行,也不会返回原来的返回值。而我们执行进程替换的主要步骤就是调用exec系列函数,具体的exec系列函数都有哪些,都是什么我们在下面介绍,进程通过调用这些exec系列函数让进程跑exec函数中的代码或者指令,从而达到了进程替换的效果,而进程原来要调用的程序就会随着进程的销毁而被回收。二. 进程替换的三个结论当我们原创 2021-10-14 23:34:30 · 263 阅读 · 0 评论 -
c++ 继承初识
初识继承继承的概念继承中子类的默认构造函数与正常情况下的区别多继承 与 虚继承继承的概念在生活中,如果一对夫妻生下属于他们的宝宝,那么这个宝宝一定会继承他的父母身上的一些特征,本次我们说的继承和生活中的继承其实是相同的,也就是说如果一个类继承另一个类,那么当前类就具备了被继承的类的所有属性,具体如下:此时我们定义了一个Person类,然后又定义了一个Student类来继承Person类,这时Student类就会多出一个保护属性的成员name,所以通过继承方式,我们可以将每个类中相同的属性单独提出来当原创 2021-09-30 11:04:05 · 512 阅读 · 0 评论 -
栈,队列,优先队列详解
栈,队列,优先队列详解栈的概念,应用与实现队列的概念,应用与实现优先队列的概念应用与实现栈的概念,应用与实现一. 栈的概念首先栈是一个后进先出的数据结构,对于栈来说,只有一种插入和删除的方式就是通过头来实现,也就是从头压入,从头弹出。当通过STL调用栈的时候需要使用头文件 #include<stack>二. 栈的应用对于栈来说我们都比较熟悉的几个函数分别是1.push()插入函数2.pop()弹出函数3.top()返回栈顶函数4.size()返回栈中元素个数函数5.emoty原创 2021-09-27 23:51:49 · 811 阅读 · 0 评论 -
Linux下使用gdb调试
Linux下使用gdb调试一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-09-24 09:55:45 · 659 阅读 · 0 评论 -
预处理详解
预处理详解翻译环境的具体内容预处理中的宏定义与其他预处理指令条件编译翻译环境的具体内容在C语言中的,我们知道通过编译器运行代码可以获得一个黑窗程序,但我们却不知道这中间转换的过程是什么,下面我们就要给大家介绍一下这个转换的详细过程。首先,我们知道一个C语言代码例如test.c,是通过翻译环境转换为可执行程序的。而这个翻译环境又是什么呢?翻译环境:翻译环境分为编译和链接,而编译又分为预编译,编译和汇编,所以我们就要研究一下这三个步骤对test.c干了什么,有什么作用,下面我们就对这三个步骤进行分析。原创 2021-08-28 20:25:13 · 188 阅读 · 0 评论 -
list底层实现
list底层实现默认构造函数运算符重载增删改查操作默认构造函数一. 首先我们知道list的底层是用链表实现的,和vector在存储方式上有很大的不同,vector是地址连续存储的,而链表是通过指针来讲不连续的地址进行连接,所以我们要先创建一个类来表示链表类型,如下图:此处创建了一个当前类的构造函数是为了之后其他类调用此类的时候直接对其进行初始化。二. 在前面我们说过我们暂且可以将迭代器理解成指针,因为之前的vector和string类都是以连续空间的方式进行存储的,所以其迭代器中的++操作可以直接原创 2021-08-15 15:48:00 · 1239 阅读 · 0 评论 -
Linux自动化构建 -- make与Makefile
make与Makefilemake与Makefile介绍创建伪目标文件Makefile文件中的符号make与Makefile介绍一. 介绍make/Makefile从本质上来说,make是一个命令而Makefile是一个文件。也就是说在Makefile文件中写出依赖关系中的目标文件和依赖关系列表,并写出你想要的操作的指令,这样就可以通过make指令直接执行Makefile文件中的所写的命令行,所以当需要多次调用一种语句的时候,就可以将这个语句写道Makefile文件中,此时只需要在命令行中写入make原创 2021-08-11 15:46:35 · 140 阅读 · 0 评论 -
函数模板与类模板初识
模板初识泛型编程函数模板类模板泛型编程在c++中提出了c语言中没有的函数重载,但是如果有以下这几种函数这几种函数都是只有类型不同的重载函数,这样如果将每一种类型都写一个函数的话,代码量就太多了,不容易读。所以在c++中提出了泛型编程的概念,也就是将这些类型统一成一种泛型类型,在用不同类型的实参的时候只写一种函数就可以了。大大降低了代码量并提高了代码的可读性。函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。如下图:类模板...原创 2021-08-10 10:42:48 · 98 阅读 · 0 评论 -
vector容器模拟实现
vector模拟实现vector默认构造函数运算符重载增删查改实现vector默认构造函数一. 在c++中vector容器就相当于数据结构中的顺序表,所以需要定义三个成员变量分别为:T* _start , T* _finish , T* _end_of_storage三个指针,分别表示_start指向顺序表的首地址,_finish指向顺序表的尾地址,_end_of_storage指向当前顺序表的最大容量所在的地址。如下:因为在容器中会用到迭代器,而暂时我们可以将迭代器理解成一个指针,所以就可以定义迭原创 2021-08-09 16:03:09 · 218 阅读 · 0 评论 -
string的底层实现(带注释)
string底层实现关于string的默认构造函数关于string 的运算符重载函数string的增删改查操作关于string的默认构造函数首先定义一个域,在域中创建一个名为string的类,此类中所需的私有成员变量具体为:此中,_str表示的是字符串的首地址指针,_size表示的是当前字符串中存储了字符的长度,_capacity表示的是当前字符串的最大存储容量,npos此处是string中定义的静态常量。一.带缺省参数的构造函数此处如果不传参str就只为当前对象开个空间,并将对象置为空,如果原创 2021-08-09 09:32:47 · 1619 阅读 · 1 评论 -
C语言 -- 数组初阶
C语言数组初阶一维数组的创建使用与存储二维数组的创建使用与存储数组作为函数参数一维数组的创建使用与存储一. 一维数组的创建数组是一组相同类型元素的集合具体模板为:type_t arr_name [const_n];type_t是指数组的元素类型arr_name表示的是数组名const_n 表示的是数组的大小,必须是常量。数组创建实例:int arr1[10]; 此语句表示的是创建一个名字为arr1的用来存储int类型的数组,数组的大小为10,也就是能存储十个int类型的整数。int原创 2021-08-01 19:54:58 · 151 阅读 · 0 评论