自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

请给我一支兰州

天天向上

  • 博客(68)
  • 收藏
  • 关注

原创 宏和inline函数的区别

宏纯粹是字符的替换,没有类型检查,十分不安全。内联函数有类型检查,更加安全。 宏无法调试,而内联函数可以调试。 宏不方便阅读源码,内联函数和普通函数一样,可以阅读源码。 用宏代替函数定义,还是有函数调用的开销。但是内联函数在函数调用点处展开,节省了函数调用的开销。...

2019-09-01 17:36:07 439

原创 线程相关函数

创建线程:int pthread_create 结束线程:int pthread_exit 等待线程:int pthread_join 取消线程:int pthread_cancel

2019-08-26 18:30:29 115

原创 进程间的通讯方式

信号 管道(有名、无名管道)有名管道用于任意两个进程、无名管道用于父子进程。 信号量(注意PV操作) 消息队列(数据有类型,先进先出原则) 共享内存(统一内存映射到不同进程、看成自己的一部分、最快) socket 网络编程。...

2019-08-26 17:01:41 113

原创 手写一个简单的makefile

main: main.o text.o list.o vector.o<Tab> gcc -o main main.o text.o list.o vector.omain.o: main.c<Tab> gcc -c main.ctext.o: text.c<Tab> gc...

2019-08-26 16:14:18 367

原创 如何查看共享内存?

查看共享内存:ipcs -m删除共享内存:ipcrm -m shmid查看信号量:ipcs -s删除信号量:ipcrm-s semid查看消息队列:ipcs -q删除消息队列:ipcrm -q queueid

2019-08-26 15:59:46 2581

原创 linux系统调用过程

产生中断->保存现场信息->将系统调用号写入到eax寄存器中->切换到内核态->取出系统调用号、查看系统调用表->调用内核函数->将结果写入eax寄存器->返回用户态->在eax寄存器中读取返回值。...

2019-08-26 15:01:01 111

原创 linux查看系统状态的命令

查看系统使用内存的命令:free 查看系统版本的命令:cat /proc/version 查看进程状态的命令:ps aux 查看CPU的命令:top 查看系统启动服务的命令:service...

2019-08-26 14:42:38 285

原创 Linux网络相关命令

ping:测试与目的主机是否连通 nslookup:查询DNS相关信息 ifconfig/ip:查询网络接口的地址 nestat/ss:显示网络相关统计信息 service:显示相关服务启动情况 tcpdump:抓取TCP报文段数据 mail:查看、发送电子邮件 write: 给用户发信息...

2019-08-26 14:27:09 78

原创 MySQL中varchar与char的区别

char是一种固定长度的类型,大小为255。varchar是一种可变长度类型,大小为65535。varchar(50)中50的涵义:最多存放50个字符。

2019-08-11 17:30:52 151

原创 MyISAM和InnoDB的主要区别

MyISAM不支持事物,InnoDB支持事物。 MyISAM是表锁的,不支持高并发,InnoDB是行锁的,支持高并发。 InnoDB支持外键,MyISAM不支持外键。 MyISAM只缓存索引,不缓存真实数据。InnoDB缓存真实数据 MyISAM关注点是性能,InnoDB关注点在于事物 MyISAM的表小,InnoDB的表大。...

2019-08-11 16:59:41 88

原创 AVL树与红黑树

先来说说AVL树:左右子树高度的绝对值之差不能超过1,也说是说,只能是1,-1或者0。再来说说红黑树:红黑树最长子树高度不能超过最短子树的两倍,所以他是弱平衡二叉树,相对于AVL树来说,它的旋转次数较少,因此,对于搜索、插入、删除的操作较多的情况下,优先选择红黑树。 红黑树的性质: 每个节点非黑即红。 根节点是黑色的。 NULL节点必须是黑色。 ...

2019-08-11 16:04:39 99

原创 deque底层

deque又称双端队列,底层是一个动态开辟的二维数组。同样也是以两倍的方式扩容。

2019-08-11 15:57:46 235

原创 谈谈C++的vector容器

vector的底层是是一个连续的动态开辟的数组,以两倍的方式扩容。但是它的扩容过程代价很高,需要开辟更大的内存,拷贝对象,然后再释放原来的内存。因此常用reverse函数预留空间,提高效率。注意:size()用来返回容器中元素的个数、empty()判断容器是否为空。...

2019-08-11 15:37:39 86

原创 C++STL

C++STL是C++标准模版库,主要包括以下几个方面:容器 近容器 迭代器 函数对象 泛型算法我主要对STL中的容器和迭代器有所研究。

2019-08-11 14:33:43 63

原创 gdb常用调试命令

l 显示代码 b+行号 设置断点 info break 进入断点,显示断点信息 delete 删除断点 r 运行代码 n 单步执行 下一行 c 继续执行 s 进入函数 f 跳出函数 p 打印 q 退出 bt 显示函数调用栈...

2019-08-09 18:38:37 274

原创 gcc与g++的区别

对于c和cpp文件,g++统一按照c++的语法来编译,对于C和cpp文件,gcc分别按照C和cpp的风格来编译 gcc默认没有STL库,要使用C++中的STL,需要添加命令:-lstdc++。g++不需要。 gcc是编译工具的集合,g++仅仅是c++编译器。...

2019-08-09 18:23:18 295

原创 HTTP与HTTPS的区别

http:超文本传输协议https:安全的超文本传输协议ssl:安全外壳协议http是建立在web网站与服务器之间的一种协议,它通过明文的方式发送数据报,但没有加密措施,简单粗暴,所以信息容易被攻击者获取,但是https在http的基础上添加了SSL,ssl会为服务器提供证书,保证传输过程的安全。...

2019-08-09 18:13:21 120

原创 IP协议的特点以及报头

IP协议的三大特点:无连接、无状态、不可靠。无连接:客户端和服务端不会长期的维持对方的信息,所以每次必须指定IP地址。无状态:数据的发送、传输以及接收都没有上下文关系,也就是说接收端可以收到重复的、无序的报文。不可靠:不能保证数据每次都能从发送端传输到接收端,所以不安全。IP的报头:略。...

2019-08-09 17:56:37 1641

原创 C和C++的区别

C是面向过程的语言,而C++是面向对象的语言。所以C++支持继承和多态。C++拥有非常强大的STL模版库。 C++有非常强大的设计模式,比如单例,工厂,观察者模式等等,这些在C语言当中都是不支持的。 C和C++一个典型的区别就在动态内存管理上了,C语言通过malloc和free来进行堆内存的分配和释放,而C++是通过new和delete来管理堆内存的。 另外强制类型转换上也不一样,C的强制类...

2019-08-09 14:37:05 3592

原创 malloc、calloc、realloc的作用和区别

malloc:只要一个参数,就是动态开辟内存的大小。calloc:需要两个参数,可以将分配好的每一个字节赋值为0。realloc:可以修改动态内存的大小。

2019-08-08 17:47:38 325

原创 fcntl

复制文件描述符 设置文件描述符标志位 设置文件描述符与之对应的状态标志、如阻塞非阻塞 设置异步IO相关操作 设置文件锁

2019-08-08 17:26:32 321

原创 什么时候用new,不能使用delete[]?

当自定义类型提供了析构函数的时候,不能这么用。理由是这样的,当自定义类型提供了析构函数的时候,内存会为它提供四个字节,记录对象的个数。这个时候如果用delete []p,编译器会从这个位置减去4个字节的地方开始释放内存,这样容易产生越界,造成delete[]p失败。...

2019-08-08 15:43:58 256 1

原创 new和delete VS malloc和free

首先是new和malloc:new实际上是malloc的加强版,new不仅可以申请内存空间,还能行进初始化操作。 如果是自定义类型,那么new还能构造出对象。 new申请失败后会抛出异常,而malloc则是返回NULL指针。然后是delete和free:delete底层也是用free实现的,但是delete会先析构对象,再释放内存空间。...

2019-08-08 15:11:17 92

原创 epoll的内核实现以及它的数据结构

epoll_create:创建内核事件表用来存放描述符和事件。它的数据结构为:struct eventpoll。其中包括了两个重要成员,一个是红黑树,也就是内核事件表。另一个重要成员是用于存放就绪事件的队列。epoll_ctl:红黑树添加节点操作:ep_insert。红黑树移除节点操作:ep_remove。红黑树修改节点操作:ep_modify。每个节点都是一个描述符和事件的结构体。epo...

2019-08-06 12:20:16 2390

原创 epoll的ET模式和LT模式

LT模式:epoll默认的工作模式。如果描述符上的事件就绪,但是它的数据没有处理完,或者没有处理、epoll下次会提醒他,让他处理。换个说法,如果fd对应的缓冲区有数据,就会调用一次epoll_wait,直到数据全部被处理完。ET模式:如果描述符上的事件就绪,但是它的数据没有处理完,或者没有处理。epoll下次不会提醒它,也就是说,在ET模式下,epoll只会对事件提醒一次,它就必须要将全部数...

2019-08-05 18:27:42 1078

原创 select、poll、epoll的区别

使用限制:select关注的文件描述符最多为1024,而poll和epoll关注的文件描述符可以达到系统允许打开的最大值。使用效率:select、poll每次都要将文件描述符从用户态转化为内核态,而epoll可以直接从内核读取、更加高效。select、poll每次都要将所有的文件描述符返回,时间复杂度为O(n)。而epoll只将就绪的文件描述符返回,时间复杂度为O(1),因为epo...

2019-08-05 17:55:07 74

原创 主机字节序列转网络字节序列

为什么主机字节序列要转化成网络字节序列呢?不同的主机,字节序列不同,而且是以小端的方式存储的。在网络中传输中,网络字节序列是用大端的方式存储的,所以要将小端转化为大端。经过小端->大端->小端这样一个过程。 htonl 将主机字节序转化为网络字节序 长整型 htons 将主机字节序转化为网络字节序 短整型 ntohl 将网络字节序...

2019-08-04 10:43:01 269

原创 TCP的拥塞控制

拥塞控制:防止过多的数据注入到网络中,包括四部分的内容。慢启动:例如,我们把拥塞窗口的值设置为1,慢启动门限设置为16,每次发送一个报文段,拥塞窗口的值就加倍,依次变为2,4,8,16。 拥塞避免:这个时候拥塞窗口的值大于等于16,也就是说达到或者超过了慢启动门限,这个时候我们就进入到了拥塞避免阶段,拥塞窗口的值由原来的成倍增长转变成为了一点一点的增长,每次给原来的值加一,也就变成了16,17...

2019-08-03 16:50:24 182

原创 关于网络基础部分的一些总结

OSI七层网络协议模型和TCP/IP四层网络协议模型七层网络协议模型:物理层、数据层、网络层、传输层、会话层、表示层、应用层。四层网络协议模型:数据层、网络层、传输层、应用层。关于网络层和传输层网络层:提供主机之间(路由器)的逻辑通信机制。传输层:提供进程间的逻辑通信机制。如果没有网络层和传输层如果没有网络层:无法选择数据传输的线路、无法保证数据能到达对端。如果没有传...

2019-08-03 15:45:48 225

原创 map底层

map是C++STL中的一种关联容器,也就是存key-value键值对的映射表容器,有map和multimap,它们之间的区别是map不允许key重复,multimap是允许key重复的;map的底层是一颗红黑树,一种非严格的平衡二叉树,左右子树的高度差不能超过较短子树高度的2倍,数据的增删查效率都比较高,平均时间复杂度在O(log2n)。在此给出红黑树的定义:1)每个结点要么是红的,要么是黑...

2019-06-26 21:03:54 571

原创 谈谈STL

STL是C++的标准模板库,主要包含了容器,迭代器,泛型算法,函数对象,绑定器,取反器,空间配置器,还有一些非标准容器等等,比如容器分为了顺序容器vector,deque,list,关联容器set,multiset,map和multimap,容器适配器stack,queue,priority_queue,非标准容器又叫近容器有string,bitset等;迭代器有正向迭代器,反向迭代器,插入型迭代...

2019-06-26 21:01:10 81

原创 malloc和new的区别

malloc只负责开辟内存,没有初始化功能,需要用户自己初始化;new不但开辟内存,还可以进行初始化,如new int(10);表示在堆上开辟了一个4字节的int整形内存,初始值是10,再如new int[10]();表示在堆上开辟了一个包含10个整形元素的数组,初始值都为0。 malloc是函数,开辟内存需要传入字节数,如malloc(100);表示在堆上开辟了100个字节的内存,返回void...

2019-06-21 16:53:09 207

原创 C和C++的区别

C面向过程,C++面向对象。C++语言中有类和对象以及继承多态。C++支持模版、运算符重载、异常处理机制、还有STL。 C只能写面向过程的代码,而C++既可以写面向过程的代码,也可以实现面向对象的代码;既然C++是面向对象的OOP语言,因此它还有非常强大的设计模式,比如单例,工厂,观察者模式等等,这些在C语言当中都是不支持的。 C和C++一个典型的区别就在动态内存管理上了,C语言通过mallo...

2019-06-18 21:51:40 139

原创 C++什么时候出现访问越界?

所谓内存访问越界,其实就是指程序访问了系统已经回收或者未经分配的内存。和内存泄漏不一样,内存泄漏指的是系统分配给你内存,你却找不到它(一般是由于保存这块内存的指针被覆盖了),因此导致这块内存资源无法释放,称作内存泄漏,内存泄漏是很严重的问题,随着程序的运行,会导致系统的内存占用量不断增高,整个系统由于内存紧张而造成卡顿或者假死,如果这是服务器,问题就严重了,而内存访问越界带来的问题,一般是不可预期...

2019-06-18 19:52:37 1469 1

原创 C++如何调用C语言语句

我们知道,C++编译器和C语言编译器生成符号的规则是不同的,C语言编译器生成符号的依据是函数名,而C++编译器生成符号是由函数名和参数列表共同决定。那么C++编译器怎么生成C语言符号呢?就是把代码括在 extern C中。代码如下:extern “C”{ int sum (int a,int b);}int main(){ sum(10,20); return...

2019-06-11 21:53:40 247

原创 如何防止C++内存泄漏

从我学习的角度而言,我所知到的方法就是引入智能指针。因为我们平时用new或者malloc的时候,有时会忘记用delete或者free。当然还有一种情况,就是程序发生异常,代码过早返回,导致没有执行到delete或者free。就会发生内存泄漏。这时我们只要在对象前面添加share_ptr,也就是智能指针。不管是忘记了还是出现了异常,在出作用域之前,对象都会被析构,与之相应的内存也会被释放掉。这就有效...

2019-06-11 21:26:05 401

原创 空间配置器

容器空间配置器的作用:将内存开辟和对象的构造过程分开,内存的释放和对象的析构过程分开。这么做的理由:如果我们继续使用C++的new和delete,会存在几个问题。第一,我们在构造容器的时候,不仅会开辟容器所需要的内存空间,还会构造出一推无用的对象。第二,我们在删除容器中的元素时,我们希望析构这个元素,但是它的内存空间不能被释放掉,因为我们还要使用容器。所以我们需要容器的空间适配器。...

2019-06-11 20:04:15 85

原创 谈谈C++的继承

假设B是A的某种关系,那么我们说A是基类,B是A的派生类。 继承的本质是代码的复用,也就是说B会拥有A除了构造函数、析构函数之外的所有代码。 基类的指针可以指向派生类,反过来却不行。 当基类和派生类拥有同名方法的时候,一般是派生类将基类的方法隐藏。但基类同名方法为虚函数时,则转变为覆盖。 当发生多重继承的时候,有可能会造成菱形继承,这个时候代码就会被派生类重复获得。于是引入虚继承。...

2019-06-08 20:32:09 109

原创 C++static关键字的理解

分为以下四种情况:static修饰全局变量如果一个变量是普通全局变量,从符号表里面可以看出,普通全局变量是global符号。因此在链接阶段其他obj文件也能够看到。而这个变量如果是static修饰的全局变量,它的符号就会变成local,只有当前的obj文件可见。因此多个源文件可以定义同名的static全局变量,不会产生重复定义的错误。static修饰局部变量普通局部变量属于指令,存放在...

2019-06-06 09:55:29 219

原创 new和malloc,delete和free的区别

先说new和malloc:new的底层也是通过malloc来开辟内存的,new比malloc多一项功能,就是开辟完内存,还可以进行初始化:int *p=new int(10);Test *p=new Test();第一条语句是new的基本操作,10代表开辟整型内存的初始值。第二条语句会在堆上开辟Test类型的一块内存,同时构造出一个对象。以上两条malloc均办不到。...

2019-06-04 16:42:26 1498

空空如也

空空如也

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

TA关注的人

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