自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++中static的用法

声明静态局部变量函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。声明静态全局变量某些外部变量(全局变量)只限于本文件引用,而不能被其他文件引用。声明静态成员变量(1)静态数据成员在所有对象之外单独开辟空间;(2)静态数据成员不随对象的建立而分配空间,也不随对象的销毁而释放,是在编译时分配空间,程...

2019-06-22 19:30:25 225

原创 new和malloc

表v

2019-05-27 16:44:34 136

原创 引用

引用引用变量是一个别名,一旦把引用初始化为某个变量,就可以使用该引用名称或者变量名称来指向变量。对一个变量声明一个引用不需要另外开辟内存单元,变量和引用指的是内存中的同一位置。注意:(1)引用必须初始化;   (2)为引用提供的初始值可以是变量或另一个引用;   (3)底层是一个指针,在使用地方替换成了指针的解引用;   (4)指针是通过地址间接访问某个变量,而引用是通过别名直接访问某...

2019-05-24 20:37:40 203

原创 C++中的const

C语言中const称为常变量,通过指针指向可以解引用修改值C++的const定义的是常量,值不允许被改变,编译期间将使用该常量值的地方替换成了该常量的值。...

2019-05-23 17:08:52 104

原创 库文件|静态库、共享库区别

库文件:预先编译好的方法(函数)的集合标准库文件一般存放在/lib或/usr/lib中,声明.h文件放在/user/include中。库文件类型:类型静态库共享库Windows.lib.dllLinux.a.so静态库 libxxx.a1、将.c文件编译成.o文件(不包括main函数的文件);2、打包做出库,命令:ar crv libxxx.a ...

2019-05-21 19:37:35 609

原创 函数重载、C/C++符号生成规则

加粗样式

2019-05-20 17:28:14 638

原创 inline函数

什么是inline函数一个函数的程序进行代码拓展而不被调用,用相应的函数代码替换函数调用。引入inline函数的原因系统中会有这样的场景:for循环调用一个处理函数或则是递归调用一些算法。因为调用一个任意函数都会为这个函数创建栈空间,如果频繁的调用小函数会消耗大量的栈空间,对内存造成很大的压力。为了提高程序执行的效率,C++引入inline,内联函数的代码会被直接插入到每个调用函数的地方,从...

2019-05-18 14:47:39 3866

原创 类返回值

2019-05-17 17:28:56 153

原创 线程安全

线程安全:进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。线程不安全:不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据,产生二义性。安全问题出现的原因:线程是并发或并行的;操作是非原子操作;操作是非互斥的;操作的对象时同一个,线程之间数...

2019-05-16 21:02:37 79

原创 C++中六个默认的函数

C++面向对象特点:继承、封装、多态构造函数任务是初始化对象的内存空间。注意:新对象被创建,由编译器自动调用构造函数,且在对象的生命周期之内只调动一次;构造函数的名字和类名相同,没有返回值;构造函数可以重载,实参决定了调用哪个构造函数;没有显示定义构造函数,编译器会提供一个默认的构造函数;构造函数不能用const来修饰。const可以修饰类的成员函数,但是该函数不能修...

2019-05-15 17:51:38 372

原创 模板

去实现两个数求和:1、C语言泛型——>void*。是一个半开半闭的区间,可能会导致越界;2、函数重载。自定义类型众多,代码重复度高;3、宏函数。宏函数没有类型检查和安全检查机制,在预编译期间处理,不安全;4、C++中的泛型——>拿模板实现。一、什么是模板?模板是C++支持参数化多态的工具,使用模板可以使用户为类或函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数...

2019-05-14 21:28:39 95

原创 线程同步

线程同步:线程之间协同工作,用于多线程访问临界资源,必须按照一定的先后顺序访问执行。线程级信号量#include <semaphore.h>sem_t sem;//信号量类型int sem_init(sem_t sem,int shared,int flag);//函数初始化有sem指向的信号量对象;//shared 信号量是否可以在进程间共享,Linux不支持,一般...

2019-05-14 18:14:07 72

原创 智能指针

https://blog.csdn.net/qq_41727218/article/details/85525447

2019-05-13 18:09:16 95

原创 三大工厂模式的代码实现及总结

简单工厂模式工厂方法模式抽象工厂方法

2019-05-06 16:50:52 187

原创 纯虚函数

纯虚函数声明:virtual 函数名(参数列表) = 0;纯虚函数的作用:是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。注意:纯虚函数没有实现体,不具备函数的功能,不能被调用。最后面的=0,只起形式上的作用,告诉编译器这是“纯虚函数”。如果在一个类中声明了纯虚函数,在其派生类中没有对其函数进行定义,则该虚函数在派...

2019-04-15 21:17:51 424

原创 单例模式

https://blog.csdn.net/qq_36403434/article/details/79153094

2019-04-15 19:59:38 94

原创 C++中的虚析构函数的理解

虚析构函数:当一个类被定义为基类时,把它的析构函数设置为虚析构函数。问题:什么时候要用虚析构函数?答案:通过基类指针来删除派生类对象的时候,基类的析构函数应设置为虚函数。这样做是为了当有一个基类的指针删除一个派生类对象时,派生类对象的析构函数会被调用。原因:析构函数调用时先调用派生类的析构函数,其次调用基类的析构函数。如果析构函数不是虚函数,而又通过基类的指针去销毁派生类的对象,那么dele...

2019-04-14 22:37:58 151

原创 C++中的虚函数

一、概述     每一个含有虚函数的类(无论是自身还是继承过来的,基类中是虚函数,派生类中同名且类型相同的函数也是虚函数),都至少有一个与之对应的虚函数表,其中存放着该类所有虚函数对应的函数指针。class Base{public: Base(int a):ma(a) { std::cout<<"Base::Base()"<...

2019-04-09 20:38:08 77

原创 线程基础

一、线程的概念进程内部的一条执行序列(执行流)二、线程的实现方式

2019-04-08 19:44:19 78

原创 C++写时拷贝技术

写时拷贝:就是在写的时候(修改字符串的时)才会进行真正的空间分配,在只读的情况下,数据进行浅拷贝。写时拷贝技术就是引用计数器的浅拷贝,是通过“引用计数”实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向这块空间。当有新的指针指向这块空间时,引用计数加1;当要释放这块空间时,仅引用计数减1,直到引用计数减为0(即最后一个指向这块内存的指针要释放)才真正释放掉这块空间;当...

2019-04-08 16:45:57 198

原创 进程间通讯

一、进程通信概念    进程是操作系统的概念,每当我们执行一个程序,对于操作系统来说就创建了一个进程,在这个过程中包括资源的分配和释放。进程用户空间是独立的,一般不能相互访问。但很多情况下,进程之间需要相互通信来完成某些功能,进程通过与内核和其它进程之间的通信来协调它们之间的行为。二、进程通信应用场景数据传输:一个进程需要将自己的数据发送给别的进程。...

2019-04-06 20:02:25 59

原创 消息队列

一、概念消息队列是发送带有类型的数据的机制,读取数据的进程可以根据类型获得特定的数据,并在这一类型上遵循先进先出的规则。比起管道它不需要固定进程的只读和只写,通信间的进程都可以读写,支持多个进程。二、具体操作在Linux中使用消息队列     进程间要完成通信至少要有一个可以让进程共享的标记,在消息队列中用到内核对象,内核对象是内核空间创...

2019-04-06 19:58:27 88

原创 信号量

一、几个基本概念原子操作:不可中断的操作,一旦操作开始执行,就不能停止,直到其运行终止。临界资源:同一时刻,只能被一个进程访问的资源。临界区:在程序中访问临界资源的代码区域。进程同步:一个进程需要等待另一个进程某些条件的发生,才能接着运行,是一种合作的关系。进程异步:两个或两个以上进程互不干涉,相互不影响,是独立运行的个体。信号量:是做进程间同步控制的记录资源数量的一个计数器。信号量...

2019-04-06 19:57:50 98

原创 共享内存

一、概念系统上的每个进程都有4G的虚拟地址空间,二真实的物理空间都是独立的在物理内存上找一块空间,使得多个进程可以访问这块空间,这就是共享内存。进程共享一个内存,如图:1、创建内核对象,并且申请物理内存;2、各进程中,分别将自己的虚拟地址通过内核对象映射到开辟的物理内存上;3、分别访问这块内存,通过各自的指针ptra、ptrb;4、断开链接,将虚拟地址与物理内存断开联系;5、删除内...

2019-04-06 19:55:01 386

原创 管道

管道:有名管道、无名管道1 .有名管道(FIFO文件/命名管道)    通常应用于任意两个进程间的通讯,它是一种特殊的文件,在磁盘上有一个文件标识,创建管道文件,但是,交互的数据并不会存储到磁盘中,管道文件不会占据磁盘空间。注:A、B两个进程通过管道文件(文件系统)访问内存上的同一块空间。//创建管道文件: 命令: mkfifo filen...

2019-04-05 21:46:13 90

原创 进程的替换

替换原理用fork创建子进程后执行的是和父进程相同的程序,也有可能执行不同的代码分支,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新进程替换,从新程序的启动例程(main函数)开始执行。记住:调用exec并不创建新进程,所以调用exec前后该进程的id并为改变。exec只是用磁盘上的一个新程序替换了当前进程的正文段、数据段、堆...

2019-03-30 19:42:41 105 1

原创 信号的使用

信号:操作系统预先定义好的某些特定事件的集合,信号可以被产生,也可以被接收信号响应方式:默认 SIG_DFL        忽略 SIG_IGN        自定义自定义修改信号的相应方式: typedef void (*...

2019-03-29 16:25:40 167

原创 僵死进程

僵死进程:PCB存在,进程主体释放。子进程结束,父进程未获取子进程的退出码,从而子进程不得不保存退出码,所以整个PCB结构也就无法释放。父进程获取子进程的退出码:pid_t wait(int *reval);pid_t waitpid();孤儿进程:孤儿进程会被init接管...

2019-03-28 08:07:32 224

原创 fork函数&父子进程共享数据的研究&写时拷贝技术

一、fork()函数原型#include <unistd.h> //引用fork()时的头文件pid_t fork(void); 返回值pid_t是进程描述符,其实就是int类型,如果fork()函数调用失败,就返回-1.成功调用fork()函数一次,返回两次——在父进程中返回子进程的pid(非0值),在子进程中返回0.函数功能以当前进程作为父进程创建出一个新的子进程,...

2019-03-23 19:14:26 659

原创 文件操作函数(笔记)

系统调用函数—>操作文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *filename, int flag, / * int mode */);返回值: < 0 出错   &nb...

2019-03-22 16:08:26 76

原创 用户态切内核态

系统调用这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。异常当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。外围设...

2019-03-21 18:43:05 97

原创 库函数&系统调用函数

一、概念系统调用(system call):系统调用实际上是指底层上的一个调用,就是内核提供的功能十分强大的一些函数。系统调用是在内核实现的,是操作系统为在用户态运行的进程和硬件设备进行交互提供的一组接口,就是设置在应用程序和硬件设备的接口层。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。库函数(library function):是用户或组织自己开发的具有一定...

2019-03-21 17:03:52 2224 1

原创 主函数参数&缓冲区的理解

1、主函数传参int main(int argc,char *argv[],char *envp[]);argc:传递的参数列表中参数的个数argv:传递的参数列表envp:传递的环境变量#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc,char ...

2019-03-19 20:45:27 438

原创 C++函数调用过程

1、函数参数带回2、函数栈帧开辟3、函数返回值返回4、函数栈帧回退5、三种调用约定的区别

2019-03-16 22:50:52 1660

原创 进程管理&进程加载

进程&nbsp;&nbsp;多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程...

2019-03-14 22:00:22 299

原创 虚拟地址空间&编译链接原理

1、虚拟地址空间&amp;nbsp;&amp;nbsp;进程地址空间需要隔离,防止恶意的程序修改其它程序的内存数据,因此计算机中引入虚拟地址空间。&amp;nbsp;&amp;nbsp;(1)每一个进程都会被分配4G的虚拟地址空间,之所以是4G,是因为在32位系统里,这个内存空间有着(2的32次方)的寻址能力,即从0x00000000~0xFFFFFFFF。&amp;nbsp;&amp;nbsp;(2)大多数操作系统都会将4G的内存空间中...

2019-03-12 23:41:49 827

原创 计算结构体的大小

struct A{ char a; int b;}struct B{ char a; //1+1 short b; //2 int c; //4}strcut C{ char a; //1+3 int b; //4 short c; //2} //10+2=12struct HH{ int a; ...

2019-03-12 10:30:37 76

原创 定长顺序表

一、顺序表&nbsp;&nbsp;是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。二、顺序表的存储结构&nbsp;&nbsp;数据元素在计算机有两种不同的表示方法:顺序映像和非顺序映像;所以得到两种不同的存储结构:顺序存储结构和链式...

2018-11-27 17:24:48 97

原创 位运算总结

位运算一、位运算符号&amp; 按位与:相同位上都为1,才为1| 按位或:相同位上只要有一个1,就为1^ 按位异或:相同为0,相异为1~(取反,不分正负数):0-&gt;1,1-&gt;0&lt;&lt;按位左移:标准规定在右边补0按位右移&gt;&gt;:正数则左边补0,负数标准没有规定在左边补充的数字,分为逻辑右移和算术右移,具体由编译器决定,windows平台和gcc采取算术右...

2018-11-13 17:47:41 158

原创 C语言中的类型转换

类型转换1、隐式(默认)转换:2、显式(强制)转换:显式类型转换又叫强制类型转换,直接将某数据转换成指定的类型,这在很多情况下可以简化转换。例如 int i; ... i=i+9.999按照隐式处理方式,首先将i转换为double型,然后相加结果为double型,再将double型转换为整型赋给i。int i;...i=i+(int)9.999这时直接...

2018-11-13 15:59:01 249

空空如也

空空如也

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

TA关注的人

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