- 博客(30)
- 收藏
- 关注
原创 linux共享内存
共享内存本质上就是内存中的一块区域,专门用于进程间通信使用。该内存空间由操作系统分配与管理。与文件系统类似,OS不仅管理共享内存,同时会创建对应的结构体来记录该共享内存属性,以便于管理。进程间相互看到同一个空间,一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据,共享内存区是最快的IPC形式。
2023-06-30 17:31:39
328
原创 C++:map&&set的简单使用
有没有发现不管是迭代器是const类型的 还是不是const类型的迭代器其实都是const_iterator来实现的,改不了set中储存的value值,其实要想若是能随意更改的话,其底层结构也不存在了。关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器效率更高。map存储的值是键值对,pair中的T1类型变量是const,T2类型的变量可以更改。,我们可以通过重复插入相同的值,并获取第二次插入的返回值的第二个参数。
2023-05-03 18:01:58
161
原创 Linux:基础IO(上)
这里有两个open函数,类似于C++的函数重载,先看看mode_t mode参数,mode_t是Umask变量,是一个无符号八进制数,文件创建时,根据传入的mode &(~umask)来确定文件的权限,umask一般是0002,上面我设置成了0000,创建出的文件权限就应该是。当我们输入数据并要打印出数据,并不是向OS直接输入数据,而是先存入C库定义的缓冲区存入数据,等程序结束时,缓冲区的数据才会向显示器打印。所以,当我们打开新的文件返回的文件描述符为3,文件描述符就是该数组的下标。
2023-04-20 10:37:27
153
原创 关于多态中虚函数的细节整理
多态的机制主要是依靠虚函数的作用。关于多态, 用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”。
2023-04-18 22:37:26
173
原创 C++ : 继承
概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(或子类),被继承的类称基类(或父类)。概念当然是苦涩难懂的,形式还是要走一下的,其实继承顾名思义就是传t承上一个类的成员变量和成员函数,既然类的成员会被访问限定符限制,继承也有继承方式:pubilc 、private 、protect继承方式:而继承下来的并不是只有单一的继承方式约束,还有成员的访问限定符约束。
2023-04-06 13:23:30
78
原创 了解Linux对进程的创建到终止
父进程调用OS提供的fork函数后,fork函数内部将会进行一系列操作,给子进程PCB、进程地址空间、页表,创建完后,此时fork结束时,要进行return语句已经不是只有父进程了,而是两个执行流来执行return,fork的返回值就有两个了。进入fork到return语句时,子进程的各个工作都准备好了,子进程和父进程的数据和代码是共享的,当子进程要对数据更改时,OS会把父进程的数据拷贝一份,放到新的物理内存,在进行修改,这就是写时拷贝,发生在数据区中.新进程为子进程,而原进程为父进程.
2023-03-31 14:45:46
113
原创 vector和list中的迭代器失效
list 的迭代器不是原生指针,被封装过的。迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,插入时是不会导致list的发生迭代器失效的,只会在删除的时候会失效,并且失效的只是指向被删除结点的迭代器,不会影响其他迭代器。erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代器不应该会失效,但是唯独当pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是没有元素的,此时pos也就失效了。
2023-03-17 18:00:53
138
原创 C++模板
template < class T1 , class T2 , . . . , class Tn > class 类模板名 {// 类内成员定义 };
2023-03-08 23:12:35
35
原创 C++内存管理
new:调用operator new函数申请空间。在申请的空间调用构造函数,完成对象的构造。比malloc多了一个调用的构造函数。delete:在空间上调用析构函数,完成对象中资源清理的工作。调用operator delete函数释放对象的空间。调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请。在申请的空间上执行N次构造函数。在释放的空间上执行N次析构函数,完成N个对象中资源的清理。
2023-03-08 22:31:32
38
原创 c++运算符重载
此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值万事达运算符重载只能是类的成员函数。因为编译器的自己生成的赋值运算符重载函数只能以字节的方式一个一个拷贝,这样的后果会出现,任意一个栈的操作都会互相影响,同时析构函数的存在,对同一块空间同时释放两次。C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
2023-03-04 22:06:49
55
原创 C++的默认成员以及函数详解(下篇)
可想而知, s1 和 s2 进行的增删改都会互相影响, 而且再后绪去堆上释放s1,s2的指向的空间,此时同一块空间释放两次.当多次使用 free () 且内存地址作为输入时,会发生双重释放错误。答案是当然不行的, 比如关于数组栈类中的会向堆上申请空间,而编译器只会傻瓜式的进行浅拷贝, 实列化一个 stack s1, 再去stack s2(s1), 此时若是只用默认生成的拷贝构造, 就会发生s1中的数组指针和s2中的数组指针指向同一块空间.但是处理的细节是不一样的,这其中的细节要深究。
2023-03-03 16:32:37
43
原创 C++的默认成员以及函数详解(上篇)
我相信大家都是从C语言跨入到C++的,C语言时一个面向过程的一门高级语言,而C++则是面向对象的一门高级语言。可是面向对象这个词,一个一个字都懂,但是组合在一起是不是就不认了呢,来,让我们看看是怎么样去面对的对象class className //空类 {// 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号class为定义类的关键字,className为类的名字,{}中为类的主体注意,跟C语言的struct的定义一样后面要加分号,不能省略类中的内容称为类的成员: 类中的变量。
2023-02-17 23:27:28
177
原创 C++入门(内联函数篇)
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。内联函数一般要求如下:函数简短,通常3-5行;函数内没有复杂的实现,比如:包含while、for 循环,递归等;通常在多处有调用;注意。
2023-02-16 16:35:26
78
原创 C++入门(引用篇)
在生活中, 会给亲近的人或者玩的好的"基友",起小名或者是起外号, 在水浒传中,李逵的外号叫"黑旋风", "黑旋风"被叫到时,我们自然而然的会像到李逵, “黑旋风” 就是李逵的别名, 接下来要讲的引用通俗的来讲也是取别名,但是要深究原理还是离不开指针。引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。注意:引用类型必须和引用实体是同种类型的。
2023-02-15 17:55:41
42
原创 Linux编译器-gcc/g++的基础使用
gcc是一个c语言编译器,g++也是一个c++语言编译器,它们只负责编译,和平时用的Visual studio不是一个层次,VS(简称)不仅可以编译代码还可以编译执行代码,也能够调试代码。它是整合了很多功能的集成开发环境,简称IDE。
2023-02-04 23:48:00
67
原创 关于Linux权限的基础知识
权限处处存在,生活中,被法律约束着,游戏中,对青少年的时间限制,看个喜欢的电影,也有可能遭遇因非VIP的身份,而无法观看。权限约束的是人,决定一件事是否允许被特定的人做。同样权限在linux中也是无处不在,访问文件需要权限,进入目录需要权限,更改文件也需要权限,下面就让我们来具体了解linux中的权限。
2023-01-19 00:28:00
204
原创 Linux 基础
一个完整的操作系统 = 操作系统内核 + 配套的应用程序然而, Linux严格意义来说 只是一个 “操作系统内核”因此,有些公司 / 开源组织又基于 Linux 内核,提供了不同的配套程序,这就构成了不同的 " 发行版 "。这里我选择的是CentOS7.0版本的.
2022-12-17 21:59:18
132
原创 了解树,二叉树和堆(数据结构)
树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法。// 第一个孩子结点 struct Node * _pNextBrother;// 指向其下一个兄弟结点 DataType _data;// 结点中的数据域 };
2022-12-10 00:08:55
65
原创 数据结构中的队列和栈
int top;//栈顶 int capacity;//空间大小 } Stack;定义一个指针数组实现动态栈int size;} Queue;实现队列时需要在队头出队,在队尾入队。所以再次封装一个结构体变量,里面放入一个head指针,一个tail指针。
2022-11-21 23:41:32
43
原创 数据结构--顺序表与单链表的实现
现在给大家介绍线性表中两个常见的结构顺序表和链表,其中链表又包括单链表和带头双向循环链表,都是用来存储数据的一种结构。
2022-11-10 18:39:13
477
原创 C程序环境和预处理
进行编译的源文件 __FILE__文件当前的行号 __LINE__文件被编译的日期 __DATE__文件被编译的时间 __TIME__如果编译器遵循ANSI C,其值为1,否则未定义 __STDC__这些预定义符号都是语言内置的。return 0;}语法:# define MAX 1000 # define reg register //为 register这个关键字,创建一个简短的名字 # define do_forever for(;;
2022-10-17 23:21:16
26
原创 c语言文件操作
什么是文件 :磁盘上的文件是文件。1.程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码。2.数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据、货物交易的数据等。文件名:唯一的文件标识,文件名包含三部分:文件路径、文件名、文件后缀。文件名可以不包含后缀名。文件后缀名决定了一个文件的默认打开方式。
2022-10-15 00:17:06
1313
原创 C语言关于动态内存管理(malloc、calloc、realloc、free)
若是没有动态容量,在创建变量时,只能预先设计好容量,而这样的容量可能会出现过多的浪费或者是容量不足,不能灵活的增加或减少容量。运用好关于动态内存管理的函数,就可以解决这些问题。让我们来了解这些函数吧!
2022-09-25 16:55:24
366
1
原创 了解的结构体
接下来该怎么定义结构体变量和如何初始化结构体int x;int y;} p1;//声明类型时同时定义变量p1 struct point p2;//定义结构体变量p2 struct point p3 = {//定义结构体变量p3时同时初始化 struct Node {int data;} n1 = {10 , {//对于结构体嵌套性的初始化方法主要有两种一种是在声明结构体的时候就对其定义并且初始化,还有一种就是我们单独对其进行定义和初始化。
2022-09-20 20:06:31
95
原创 整型类型的内存存储
1.整形类型是通过补码储存在内存中2.字节内存分配的方式取决于大小端3.整形有整形提升和截取,得到的结果不同4.不同类型的范围不同5.此处的整形数打印都按照 %d 或者 %u打印,都是需要整形提升。...
2022-08-11 00:17:29
422
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人