自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 共享内存原理及实现通信过程

共享内存原理及实现通信过程共享内存的概念及创建过程共享内存的使用函数使用共享内存完成通信共享内存的概念及创建过程一. 共享内存的概念共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。进程通信的本质就是让两个进程看到同一个空间,所以共享内存就是在物理内存中申请一块空间,然后让通信的每个进程通过进程地址空间与页表完成从物理地址到进程地址空间的映射,然后就可以对该块空间进行修改与读取了。

2022-02-14 10:19:11 10280 2

原创 动静态库详解

动静态库详解认识动静态库动静态库各自的特征如何打包,生成动静态库认识动静态库一. 动静态库的基本原理首先我们先了解一下一个代码转换成程序需要的步骤都有哪些:预处理: 将代码转换成test.i代码 ,还是c语言代码编译: 将test.i转换成汇编语言代码,test.s汇编: 将test.s转换成可重定向的二进制文件(目标文件),test.o链接: 将这些二进制文件链接起来转换成真正意义上的可执行文件。那么库是怎么形成的呢??当我们将代码从test.c变为test.o的时候,我们将这些.o

2022-02-08 21:37:20 1410

原创 进程优先级,环境变量与进程地址空间详解

进程优先级,环境变量与进程地址空间详解进程优先级环境变量进程地址空间进程优先级一. 为什么要有优先级??因为操作系统资源是有限的,但是进程是有很多个的,所以我们需要让不同的进程,执行的先后顺序不同,所以就有了优先级,这样可以改善系统资源分配的问题。二. 进程优先级的基本概念CPU资源分配的先后顺序就是指的进程的优先权进程优先权高的有优先执行的权利,配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来就可以把不重要的进程安排到某个CPU中,

2022-02-06 09:43:53 476

原创 创建子进程与进程的状态

创建子进程与进程状态创建子进程进程的状态与孤儿进程创建子进程一. 创建子进程的概念:在之前我们了解过,操作系统要对进程进行管理就要先描述再组织,那么操作系统管理的原因是因为内存中存在大量的进程,那么这些进程是怎么来的呢,一部分进程是通过磁盘中的可执行程序运行后,将代码和数据加载到内存中并创建对应的PCB实现创建进程,还有一些可以通过接口来创建进程,这里通过接口创建的进程就是我们今天要将的子进程,它和前面的进程不同的是它的代码部分不是来自硬件而是来自于它的父进程,而创建一个子进程也需要创建一个它对应的P

2022-01-29 22:00:26 1374

原创 初识操作系统与进程

初识操作系统与进程初识操作系统进程的粗略了解对linux下的PCB"task_struct"结构体中描述的内容分类粗略解读初识操作系统提到操作系统就不得不提起冯诺依曼体系结构,因为现在我们经常使用的电脑,笔记本都是遵循冯诺依曼体系结构的。那么冯诺依曼体系结构都包括哪几方面呢?冯诺依曼体系结构分为输入设备、输出设备、内存、CPU,其中内存也就是存储器,CPU包括运算器和控制器。是不是听到这几个名词都特别的生疏,其实我们在日常生活中会用到很多,比如输入设备有: 键盘 , 网卡 , 硬盘 , 话筒 ,

2022-01-27 20:40:32 2324

原创 平衡二叉搜索树(AVL树)详解

平衡二叉搜索树详解平衡二叉搜索树的概念AVL树的底层实现平衡二叉树底层大概实现的代码平衡二叉搜索树的概念AVL树的概念:二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而

2022-01-12 15:34:35 1246

原创 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 580

原创 二叉搜索树详解与实现

二叉搜索树详解与实现二叉搜索树概念二叉树的增删查改K类型二叉搜索树和KV类型二叉搜索树的底层代码实现二叉搜索树概念二叉搜索树又称二叉排序树,它具有以下这几种性质:如果它的左子树不为空,则左子树上所有节点的值都小于根节点的值如果它的右子树不为空,则右子树上所有节点的值都大于根节点的值他的左右子树都是二叉搜索树那么它为什么要叫做二叉排序树呢?因为它的中序遍历就是一个有序的数列,所以我们一般用中序遍历来遍历二叉搜索树,并且也可以使用二叉搜索树的这个特性来检查当前二叉树是否是二叉搜索树。二叉树的

2022-01-09 10:37:23 668

原创 C++多态详解

C++中多态详解多态的类型与两个条件二级目录三级目录多态的类型与两个条件一.多态的类型多态分为两种类型分别是静态多态和动态多态静态多态,又称前期多态,其实就是我们认识的函数重载,例如我们最熟悉的cin>>和cout<<就是bian’yi’qi二级目录三级目录...

2022-01-08 10:13:43 933

原创 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 2598

原创 进程替换概念与exec函数

进程替换与exec函数进程替换exec系列函数解读三级目录进程替换一. 概念:进程替换就是指将当前程序替换成一个新的程序,让当前进程执行这个新程序,如果替换成功了,原来的程序就不会被执行,也不会返回原来的返回值。而我们执行进程替换的主要步骤就是调用exec系列函数,具体的exec系列函数都有哪些,都是什么我们在下面介绍,进程通过调用这些exec系列函数让进程跑exec函数中的代码或者指令,从而达到了进程替换的效果,而进程原来要调用的程序就会随着进程的销毁而被回收。二. 进程替换的三个结论当我们

2021-10-14 23:34:30 321

原创 c++ 继承初识

初识继承继承的概念继承中子类的默认构造函数与正常情况下的区别多继承 与 虚继承继承的概念在生活中,如果一对夫妻生下属于他们的宝宝,那么这个宝宝一定会继承他的父母身上的一些特征,本次我们说的继承和生活中的继承其实是相同的,也就是说如果一个类继承另一个类,那么当前类就具备了被继承的类的所有属性,具体如下:此时我们定义了一个Person类,然后又定义了一个Student类来继承Person类,这时Student类就会多出一个保护属性的成员name,所以通过继承方式,我们可以将每个类中相同的属性单独提出来当

2021-09-30 11:04:05 553

原创 栈,队列,优先队列详解

栈,队列,优先队列详解栈的概念,应用与实现队列的概念,应用与实现优先队列的概念应用与实现栈的概念,应用与实现一. 栈的概念首先栈是一个后进先出的数据结构,对于栈来说,只有一种插入和删除的方式就是通过头来实现,也就是从头压入,从头弹出。当通过STL调用栈的时候需要使用头文件 #include<stack>二. 栈的应用对于栈来说我们都比较熟悉的几个函数分别是1.push()插入函数2.pop()弹出函数3.top()返回栈顶函数4.size()返回栈中元素个数函数5.emoty

2021-09-27 23:51:49 879

原创 Linux下使用gdb调试

Linux下使用gdb调试一级目录二级目录三级目录一级目录二级目录三级目录

2021-09-24 09:55:45 680

原创 预处理详解

预处理详解翻译环境的具体内容预处理中的宏定义与其他预处理指令条件编译翻译环境的具体内容在C语言中的,我们知道通过编译器运行代码可以获得一个黑窗程序,但我们却不知道这中间转换的过程是什么,下面我们就要给大家介绍一下这个转换的详细过程。首先,我们知道一个C语言代码例如test.c,是通过翻译环境转换为可执行程序的。而这个翻译环境又是什么呢?翻译环境:翻译环境分为编译和链接,而编译又分为预编译,编译和汇编,所以我们就要研究一下这三个步骤对test.c干了什么,有什么作用,下面我们就对这三个步骤进行分析。

2021-08-28 20:25:13 216

原创 list底层实现

list底层实现默认构造函数运算符重载增删改查操作默认构造函数一. 首先我们知道list的底层是用链表实现的,和vector在存储方式上有很大的不同,vector是地址连续存储的,而链表是通过指针来讲不连续的地址进行连接,所以我们要先创建一个类来表示链表类型,如下图:此处创建了一个当前类的构造函数是为了之后其他类调用此类的时候直接对其进行初始化。二. 在前面我们说过我们暂且可以将迭代器理解成指针,因为之前的vector和string类都是以连续空间的方式进行存储的,所以其迭代器中的++操作可以直接

2021-08-15 15:48:00 1301

原创 Linux自动化构建 -- make与Makefile

make与Makefilemake与Makefile介绍创建伪目标文件Makefile文件中的符号make与Makefile介绍一. 介绍make/Makefile从本质上来说,make是一个命令而Makefile是一个文件。也就是说在Makefile文件中写出依赖关系中的目标文件和依赖关系列表,并写出你想要的操作的指令,这样就可以通过make指令直接执行Makefile文件中的所写的命令行,所以当需要多次调用一种语句的时候,就可以将这个语句写道Makefile文件中,此时只需要在命令行中写入make

2021-08-11 15:46:35 155

原创 函数模板与类模板初识

模板初识泛型编程函数模板类模板泛型编程在c++中提出了c语言中没有的函数重载,但是如果有以下这几种函数这几种函数都是只有类型不同的重载函数,这样如果将每一种类型都写一个函数的话,代码量就太多了,不容易读。所以在c++中提出了泛型编程的概念,也就是将这些类型统一成一种泛型类型,在用不同类型的实参的时候只写一种函数就可以了。大大降低了代码量并提高了代码的可读性。函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。如下图:类模板...

2021-08-10 10:42:48 124

原创 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 236

原创 string的底层实现(带注释)

string底层实现关于string的默认构造函数关于string 的运算符重载函数string的增删改查操作关于string的默认构造函数首先定义一个域,在域中创建一个名为string的类,此类中所需的私有成员变量具体为:此中,_str表示的是字符串的首地址指针,_size表示的是当前字符串中存储了字符的长度,_capacity表示的是当前字符串的最大存储容量,npos此处是string中定义的静态常量。一.带缺省参数的构造函数此处如果不传参str就只为当前对象开个空间,并将对象置为空,如果

2021-08-09 09:32:47 1667 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 189

原创 Linux初识 第一章

Linux初识 第一章Linux中的一些基础指令二级目录三级目录Linux中的一些基础指令一.显示命令ls命令是显示命令,但是只显示当前文件的笼统信息如:而ls -l命令就是显示更多当前文件的属性信息,也可以写成ll如:ls -a命令可以显示当前文件中的隐藏文件如:而当想要显示当前文件的更多的属性信息则需要指令ls -al如:二.创建命令mkdir命令表示的是创建一个目录,文件类型为d如下:touch命令表示的是创建一个普通文件,如txt文件,.c文件,.cpp文件等

2021-07-29 16:16:07 222

原创 C++动态内存管理

C++动态内存管理虚拟内存分段C++中的new/delete和malloc/free各自的优劣operator new/operator delete与new/delete之间的关系虚拟内存分段虚拟内存分段分为:1.栈 2.堆 3.静态区(数据段) 4.常量区(代码段/正文)一. 栈函数的调用需要建立栈帧,栈帧主要存储函数的变量,参数,返回值等等。栈是向下生长的,栈帧后调用的比先调用的地址小,栈的大小一般是有规定的,栈所占的内存是不大的。二.堆动态内存申请和释放例如malloc和free在堆

2021-07-25 12:31:23 126

原创 类与对象(下章)

类与对象友元类与友元函数再谈构造函数静态成员友元类与友元函数一. 友元类是当前类的所有成员都可以是另一个类的友元函数,都可以访问另一个类的非公有成员。由上图可知道,此时Date和Time就是友元类,此时Date可以调用Time的非公有成员。1.友元关系是单向的,不具有交换性。比如上述的Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。2.友元关系是不具有传递性的例如如果

2021-07-20 22:45:01 90

原创 类与对象详解

类与对象详解拷贝构造函数运算符重载与友元函数运算符重载应用->日期表的创建拷贝构造函数拷贝构造函数是一种特殊的成员函数一.特征:1.拷贝构造函数时构造函数的一种重载形式。2.拷贝构造函数的参数只有一个且必须使用引用参数,使用传值方式会引发无穷递归调用。拷贝构造函数的使用语句如下:上面的语句就会将d1中的内置成员变量拷贝到对象d2中,但是此时拷贝是浅拷贝,只是将两个指针指向同一块空间。上面那种传参方式是错误的,因为本来传参方式中的传值操作就是一种拷贝构造,这样会造成无穷的递归,所以在

2021-07-11 12:34:14 127

原创 C++内联函数,auto指针,初识类与对象

C++内联函数,auto指针,初识类与对象C++内联函数auto智能指针初识类与对象C++内联函数一.内联函数的概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,此时没有函数压栈的开销,就是不会建立栈帧,可以提升程序的运行效率。如下图:二.在C语言中为了小函数避免建立栈帧的消耗,C语言提供了宏函数支持,在预处理阶段进行展开,那么C语言已经解决了栈帧消耗的问题,为什么C++还要提供inline函数呢?a: C语言定义的宏函数不支持调试b: 宏函数的语法复杂,

2021-07-10 08:57:12 1571

原创 c++的重载与引用

c++重载与引用及其拓展c++重载c++引用引用传返回值c++重载c++语言,作为高级语言排行榜中名列前三甲的头牌,其不仅将c语言中基本上所有的功能都囊括并且还扩展了很多功能,其中重载就是这些功能中的一种。一:c++重载的概念:在c++中可以定义多个名称相同的函数,但是这些函数中也要有不同之处,这些函数可以因参数的个数和参数的种类进行分辨,但不能通过返回值的类型分辨,返回值的不同不能满足函数重载的要求。例如:int add(int a , int b); (1)in

2021-07-08 21:45:06 334

原创 栈和队列的实现

栈与队列的相关实现栈的原理与代码实现队列的原理与代码实现栈的原理与代码实现栈在数据结构中属于一种线性结构栈结构满足后进先出的结构,只能从栈顶入栈出栈。栈结构的主要操作有:1.建立一个栈结构体并对齐进行初始化,具体代码如下:2.入栈操作:3.出栈操作:4.返回栈顶元素操作:5.返回栈中元素个数:6.判断栈是否为空:7.摧毁栈以上为关于栈的所有操作。队列的原理与代码实现队列是属于先进先出的线性结构队列要从后面进行入队并从前面进行出队。队列的主要操作的具体代码为

2021-04-24 15:36:36 80

原创 c语言文件操作并用文件操作将通讯录中的信息进行存储

在c语言中有这么一门关键的操作,他就是文件操作。文件操作c语言中具体的文件操作二级目录三级目录c语言中具体的文件操作在c语言中具体的文件操作是通过库函数进行实现的。其中最关键的函数就是fopen()函数该函数是文件打开函数,通过此函数可以对文件进行操作,具体代码如下:FILE* pf = fopen(“data.txt” , “r”);上面的代码就是通过fopen()函数将计算机中的data.txt文件进行读操作。并将其地址赋值给pf。在文件操作的代码中有很多文件的使用方式例如上面的"r"就

2021-03-21 19:56:22 1046

原创 动态内存管理

malloc,calloc,realloc动态开辟空间malloc()函数开辟空间calloc()函数开辟空间与free()释放空间realloc()函数重新开辟空间并增加空间malloc()函数开辟空间在计算机的内存中分为堆区,栈区和静态区栈区是用来放局部变量和函数形参的,而堆区就是用来存储动态内存开辟的空间的。malloc具体代码如下#define MAX 10#include <stdio.h>int main(){int* p = (int*)malloc(sizeof

2021-03-18 11:37:42 73

原创 c语言 自定义类型详解

结构体类型结构体的声明与调用将结构体作为另一个结构体的成员结构体的内存对齐与位段联合体的内存存储枚举的定义结构体的声明与调用一 . 结构体类型的声明代码如下:struct S1{int a;char name[20];double s;};该代码表示该结构体中具有一个int类型的成员a,字符串类型的成员name和double类型的成员s。二. 建立一个结构体对象代码如下:struct S1 s1;改代码为建立一个结构体对象s1,该对象s1可以对结构体内部的成员进行调用。三. 调

2021-03-11 17:13:42 317

原创 c语言中的字符串函数的模拟实现

一. strcpy(char* arr1 , const char* arr2)函数该函数的作用是将数组arr2中的内容复制到数组arr1中具体代码如下:此时arr1被赋值之后的结果是:二. strcat(char* arr1, const char* arr2)函数该函数的作用是将数组arr1中的内容和数组arr2中的内容进行连接具体代码如下:将数组arr2的内容放到arr1中之后的结果为:三. strcmp(const char* arr1 , const char* arr

2021-02-18 09:39:12 1157 5

原创 最长连续不重复子序列

题目:给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。数据范围1≤n≤100000输入样例:51 2 2 3 5输出样例:3此题应用双指针算法来降低时间复杂度,使O(n^2) 的时间复杂度降低为O(n)。具体代码为:#include < iostream >using n

2021-02-04 13:54:05 134

原创 扫雷小游戏

通过c语言实现扫雷游戏中和三子棋一样需要通过二维数组进行初始化并定义首先讲代码分为头文件与两个源文件来进行实现首先在存储头文件中的game.h中有参数为:此中通过宏定义来定义参数,其中EASY_COUNT是扫雷中雷的个数先通过初始化来定义一个二维数组用来放置具体代码为:此处为初始化一个二维数组作为扫雷的框架声明一个函数用来打印棋盘具体代码为:此处代码用来在之前定义的框架中打印字符’0’ 和 ‘*’具体代码如下:此处代码主要作用是在已经打印好的扫雷框架中通过rand()函数

2021-01-25 17:48:37 120

原创 三子棋游戏

制作三子棋游戏首先先把代码分成三块,分别是game.h是属于头文件,用来声明函数和一些所需的数。game.c是用来实现前面头文件包game.h中所有声明的函数,是代码运行中的主要部分test.c是属于用来测试代码的源文件,在test.c中对game.c中的函数进行调用来实现游戏。此处因为是分成了三份来写代码所以要在测试代码test.c中和game.c写出头文件#include"game.h"来调用game.h声明的函数和在game.c中实现的函数。首先来看头文件game.h中的函数的声明分别

2021-01-25 15:32:53 176

原创 关机小程序c语言版

预备知识:c语言中的system()函数:直接执行系统程序shutdown -s -t 60:电脑在一分钟时间内关机shutdown -a:取消关机代码的大意为:让电脑直接执行在一分钟时间内关机,如果用户输入我是猪的话则取消关机。代码:#include<stdio.h>//关机程序//如果在一分钟之内输入我是猪,取消关机int main(){char input[20] = “”;system(“shutdown -s -t 60”);again:printf(“请注

2021-01-20 19:23:46 166

原创 2021年的第一篇博客

2021-01-11 10:13:11 134

空空如也

空空如也

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

TA关注的人

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