- 博客(145)
- 收藏
- 关注
原创 函数重载简单介绍
文章目录什么是函数重载C++为什么支持函数重载,C语言不支持函数重载需要注意的C++和C语言代码之间如何互相调用C调用C++C++调用C代码拓展知识什么是函数重载一组函数,其中函数名相同,参数列表的个数或者类型不同,那么这一组函数就称作函数重载。#include<iostream>using namespace std;bool compare(int a, int b)...
2019-06-07 13:20:53
414
原创 静态库与动态库的制作和使用
文章目录库文件库文件与可执行文件的区别静态库制作静态库使用静态库总结动态库的制作动态库使用库文件库文件是编译好的二进制文件,用于在链接阶段同目标代码一起生成可执行文件,或者运行可执行文件的时候被加载,以便调用库文件中的某段代码。库文件通过头文件向外导出接口。用户通过头文件找到库文件中找到函数实现的代码从而把这段代码链接到用户程序中去。库的位置: /usr/lib /lib我们开...
2019-06-06 14:40:02
559
1
原创 top命令详解
文章目录top中一些字段的含义top内部命令top使用方法top举例讲解top中一些字段的含义 VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量 RES:resident memory usage 常驻内存1、进程当...
2019-06-05 14:27:34
754
原创 ptmalloc 内存管理概述
文章目录ptmalloc引入ptmalloc简述内存管理的设计假设内存管理数据结构概述主分配区(main_arena) 与 非主分配区(non_main_arena)chunk的组织chunk 格式空闲 chunk 容器binsfast binsunsorted bintop chunkmmaped chunklast remaindersbrk 与 mmap内存分配概述分配算法概述ptmallo...
2019-06-01 22:12:36
1191
2
原创 Linux内存管理—Slab分配器
Slab分配器的引入内部碎片内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。举例:某进程向系统申请了3K内存空间,系统通过伙伴系统算法可能分配给进程4K(一个标准页面)内存空间,导...
2019-05-30 21:29:15
1035
2
原创 Linux内存管理—buddy算法
文章目录伙伴的算法的引入满足以下条件的两个块称为伙伴伙伴位图伙伴算法的思想伙伴算法的数据结构伙伴算法内存分配的过程伙伴算法分配的思想伙伴算法的具体内存分配过程__alloc_pages()函数的实现_rmqueue()函数的实现伙伴算法的具体释放过程伙伴算法释放的思想__free_one_page()函数的实现位图位图的使用伙伴的算法的引入在系统运行过程中,经常需要分配一组连续的页,而频繁的申...
2019-05-30 12:33:53
2140
原创 Linux高端内存映射
文章目录高端内存的由来物理内存映射永久内核映射临时内核映射非连续内存分配高端内存的由来通常32位Linux内核地址空间划分0 ~ 3G为用户空间,3 ~ 4G为内核空间当内核模块代码或线程访问内存时,代码中的内存地址都为逻辑地址,而对应到真正的物理内存地址,需要地址一对一的映射。 物理地址 = 逻辑地址 – 0xC0000000假设按照上述简单的地址映射关系,内核只能访问1G物理...
2019-05-29 20:50:56
358
原创 数据库概念
文章目录数据库系统数据库系统的组成数据库系统的分类数据库数据库管理系统数据库管理系统的组成DBMS的执行步骤数据库管理系统的功能人员模型概念模型(信息模型)数据模型数据模型的组成最常用的数据模型数据库系统数据库系统是指在计算机系统中引入数据库后的系统数据库系统在整个计算机系统中的地位如图所示数据库系统的组成数据库系统主要由计算机硬件、数据库、数据库管理系统人员组成计算机硬件构成计...
2019-05-24 22:02:13
412
原创 Linux内核do_fork()分析
中断和异常向量每个中断和异常是由0-255之间的一个数来标识。因为一些为重的原因,Inter把这8位无符号整数叫做一个向量。不可屏蔽中断的向量和异常的向量是固定的,而可屏蔽中断的向量可以通过对中断控制器的编程来改变。Linux利用了下列向量:0-31的向量对应于异常和不可屏蔽中断32-47的向量被分配给可屏蔽中断,即由IRQ引起的中断。生于的48-255的向量用来标识软中断。Linux...
2019-05-24 19:31:21
1514
原创 运行时堆栈及函数调用中的部分相关指令
运行时堆栈运行时堆栈是内存数组,CPU用ESP(堆栈指针寄存器)对其进行直接管理,32位模式下,ESP寄存器存放的是堆栈中某个位置的32位偏移量.ESP基本上不会直接被程序员控制,它是用CALL,RET,PUSH和POP等指令间接进行修改.运行时堆栈工作于系统层,处理子程序调用.ESP总是指向压入到栈顶的最后一个数值。如下图所示:ESP中保存的是刚压入堆栈数值(00000001)的偏移量。...
2019-05-15 21:20:31
1241
原创 从汇编层面看函数调用的过程
栈帧C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。我们知道每⼀一次函数调用都是⼀一个过程。这个过程我们通⻓长称之为:函数的调⽤用过程。这个过程要为函数开辟栈空间,⽤用于本次函数的调⽤用中临时变量量的保存、现场保护。这块栈空间我们称之为函数栈帧。ebp存放了指向函数栈帧栈底的地址esp存放了指向函数栈帧栈顶的地址函数调用的参数显然存储在函数调...
2019-05-15 14:42:24
2251
3
原创 简单算术运算汇编指令和CPU状态标志位介绍
文章目录数据传送指令操作数类型MOV指令MOVZX指令(只用于无符号整数)MOVSX指令(只用于有符号整数)LAHF和SAHF指令XCHG指令直接偏移量操作数标志状态位无符号运算:零标志位、进位标志位和辅助进位标志位加法和进位标志位减法和进位标志位辅助进位标志位奇偶标志位有符号运算:符号标志位和溢出标志位符号标志位溢出标志位与数据相关的运算符和伪指令OFFSET运算符PTR运算符TYPE运算符LE...
2019-05-14 17:04:08
4522
1
原创 C++设计模式—装饰器模式
定义:动态地给一个对象添加一些额外的职责。就添加功能来说,Decorator模式相比生成子类更为灵活。属于结构型模式。本质:在面向对象的设计中,我们应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式就是通过把复杂的功能简单化,分散化,然后再运行期间,根据...
2019-05-07 17:50:57
430
原创 C++成员初始化
文章目录初始化列表为什么使用初始化列表必须使用初始化列表的成员C++98成员变量初始化C++11中的成员变量初始化列表初始化优点初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。为什么使用初始化列表初始化类的成员有两种方式:1.使用初始化列表2.在构造函数体内进行赋值操作。使用初始化列表主要...
2019-05-05 11:19:15
402
原创 C++设计模式—迭代器模式
迭代器模式简述定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。又称作游标(Cursor)。迭代器模式是一种对象行为型模式迭代器的模式结构图外部迭代器与外部迭代器:①内部迭代器:指的是由迭代器自己来控制下一个元素的步骤,即当客户端利用迭代器读取当前元素后,迭代器的当前元素自动移到一下个元素,而客户端无法干预。②外部迭代器:则客户端控制迭代下一个元素的步骤...
2019-05-03 22:06:50
362
原创 C++设计模式—代理模式
文章目录代理模式简述代理模式的实现代理模式的应用场景代理模式简述定义:是结构型的设计模式之一,它可以为其他对象提供一种代理以控制对这个对象的访问在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。客户端并不能直接访问真正的主题对象,只能通过代理对象进行间接的访问,这样我们就可通过代理对象来控制对真实主题对象的访问,可以在访问前后做一些...
2019-05-03 18:27:14
187
原创 C++设计模式—观察者模式
定义:观察者模式(发布/订阅模式,模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式,属于行为模式中的一种,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不...
2019-05-03 16:44:08
153
原创 C++STL的容器的底层实现详解
文章目录顺序容器vector(向量容器)deque(双端队列)list关联容器set(集合)multisetmap(key,value)multimap顺序容器vector(向量容器) 特点内存可2倍增长的动态数组数据结构:线性连续空间维护三个迭代器:start、finish、end_of_storage注意:动态增加大小,并不是在原空间之后接续新空间(因为无法保证之后尚有可供...
2019-04-27 21:13:22
15151
5
原创 C++四种强制类型转换
static_cast 用法:static_cast<类型说明符> (变量或表达式) 作用用于基本类型数据的转换double d = 3.1222;int a = static_cast<int> (d);将任何类型转换为void类型把任何类型的表达式转换为void类型用于类层次结构中基类和派生类之间指针或引用的转换它允许子...
2019-04-27 01:23:58
3052
原创 高级I/O框架libevent库简介
基于Reactor模式实现的I/O框架库包含了如下几个组件:句柄(Handler)事件多路分发器(EventDemultiplexer)事件处理器(EventHandler)具体的事件处理器(ConcreteEventHandler)、Reactor。 句柄作用:当内核检测到就绪事件时,它将通过句柄来通知应用程序这一事件在Linux下,I/O事件对应的句柄是文件描...
2019-04-26 23:38:33
222
原创 RTTI机制
RTTI(Runtime Type Information)RTTI代表运行时类型信息,它提供了运行时确定对象类型的方法。typeid头文件:# include<typeinfo>返回类型:const type_info& type_infoclass type_info {public: virtual ~type_info(); ...
2019-04-25 10:59:56
396
原创 多重继承
多重继承定义:一个派生类有两个或多个基类,派生类从两个或多个基类继承所需的属性。(允许一个派生类同时继承多个基类)声明多重继承的方法class D:public A,protected B,private C{ 类D新增加的成员}D是多重继生的派生类,它以公用继承的方法继承A,以保护继承方式继承B,以私有继承方法继承C。多重继承派生类的构造函数多重继承派生类的构造函数形式与单继...
2019-04-25 00:52:40
637
原创 C++设计模式—工厂模式
文章目录简单工厂模式工厂方法模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类型:创建型模式分类:简单工厂模式 工厂方法模式抽象工厂模式简单工厂模式简单工厂模式也叫做叫做静态工厂方法(static Factory Method)模式。特点:由一个工厂对象决定创建出来哪一种产品类的实例.实质:由一个工厂类根据传入的参数,动...
2019-04-23 10:54:04
321
原创 守护进程
进程间的层次关系 进程组一个或多个进程的集合一般与同一个作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID进程组的结束要等到组中所有的进程结束kill发送给进程组的命令:kill -9 -进程组号question:为什么要产生进程组??anwser:提供进程组就是为了方便对进程进行管理。假设要完成一个任务,需要同时并发100个进程。当用户处于某种原因要...
2019-04-21 18:00:19
220
原创 继承与派生、虚函数、多态
文章目录继承单继承多重继承派生派生类的声明方式派生类的构成派生类成员的访问属性公用继承私有继承保护继承普通派生类的构造函数创建普通对象的构造函数有子对象的派生类的构造函数创建子对象派生类构造函数普通派生类的析构函数有子对象的派生类的析构函数虚函数虚函数的作用虚函数的使用方法虚函数表在什么情况下应当声明为虚函数非虚函数静态关联动态关联多态性纯虚函数抽象类重载:函数名相同,参数列表不同、处在同一个作...
2019-04-21 00:58:19
1072
原创 LeetCode(135)—分发糖果
题目要求:N个孩子站成一排,每个人被分配了一个排名值。你需要给孩子分配糖果:每个孩子至少有一个糖果较高排名的比左边较低排名的多,比右边较低排名的多。解题思路:贪心算法从前往后遍历ratings数组,如果i+1个孩子的排名高于第i个孩子,则第i+1个孩子的糖果比第i个孩子的糖果多1.从后往前遍历ratings数组,如果i+1个孩子的排名高于第i个孩子,而且第i+1个孩子的糖果数<...
2019-04-19 19:56:40
303
原创 LeetCode(137)—Single Number、Single Number II
Single Number题目:Given an array of integers, every element appears twice except for one. Find that single one.解题思路:利用异或,不仅能处理两次的情况,只要出现偶数次,都可以清零#include<iostream>#include<vector>usin...
2019-04-19 18:46:30
145
原创 I/O复用—epoll
文章目录epoll系统调用内核事件表操作epoll的内核事件表的函数epoll举例由于select和poll 存在很多不足之处,因此我们针对这些缺点使用epoll解决。epoll系统调用内核事件表epoll是Linux特有的I/O复用函数。它用一组函数来完成任务,而不是一个函数epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中(只需传一次),不是像select和poll那样...
2019-04-19 10:08:41
140
原创 I/O复用—poll
文章目录poll系统调用poll举例select和poll的区别由于poll和select非常相似,对于其理论内容就不过多介绍,我们直接看其系统调用接口。poll系统调用poll的原型#include<poll.h>int poll(struct pollfd,nfds_t nfds,int timeout); fds参数:一个pollfd结构类型的数组,指定所有我...
2019-04-19 08:48:05
149
原创 IO复用—select系统调用
ser#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<arpa/inet.h>#include<netinet/in.h>#include<sys...
2019-04-18 17:02:26
322
原创 DNS
一、概述域名系统DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。因特网的域名系统DNS被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大多数名字都在本地进行解析,仅少量解析需要在因特网通信,因此DNS系统的效率很高。由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个DNS系统的正常运行。域名到IP地址的解析是由分布在因特网上的许多域名服...
2019-04-17 23:54:18
292
原创 大数的加减乘除
#include <iostream>#include <algorithm> #include <string>#include <vector>using namespace std;// 大整数类型class BigInt{public: BigInt(string str) :strDigit(str) {}privat...
2019-04-16 22:31:31
156
原创 输入网址回车后发生的过程
总过程DNS解析当我们输入一个网址的时候,这个网址例如www.baidu.com,我们需要知道这个网址其实是一个主机名,需要通过映射关系根据主机名获取IP地址。这个映射关系可以称为DNS。获取IP地址的途径浏览器浏览器会将我们近一段时间访问的主机名及对应的IP地址进行缓存,缓存时间与浏览器有关,在该缓存时间内,我们输入同样的主机名就可以快速从浏览器缓存区获取IP地址并建立连接。...
2019-04-12 02:42:37
502
原创 三次握手和四次挥手
三次握手两次的问题:如果两次,客户端发送完SYN之后关闭,服务器端就不知道是否建立链接,文件描述符就会被一直占用。四次挥手为什么需要TIME_WAIT状态当建立链接后,服务器重启,客户端接着发送数据,会出错,无法正确读取数据。怎么区分断电、断网还是长时间占用不发数据??隔一段时间发送心跳包每隔5分钟发送一个数据包,不需要恢复,有可能丢掉,3次没收到,认为掉线,在服务器端主动断...
2019-04-12 02:11:35
674
原创 HTTP协议
HTTP协议HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。默认HTTP的端口号为80,HTTPS的端口号为443。HTTP协议的主要特点支持客户/服务器模式。简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联...
2019-04-09 23:41:33
156
原创 C++设计模式—单例模式
文章目录设计模式定义目的种类单例模式饿汉模式懒汉模式线程安全的单例模式设计模式定义设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。目的使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性。种类单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式等等单例模式皇帝有且只有一个,两个会出现问题。有些对象只需要一个,比如:配置文件、工具...
2019-04-09 21:08:19
345
原创 带引用计数的智能指针shared_ptr、weak_ptr
智能指针的引入由于C++语言没有自动内存回收机制,每次new出来的内存都要手动delete。忘记delete二次释放异常导致程序过早退出,没有执行delete用智能指针便可以有效缓解这类问题理解智能指针1.从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装。因此智能指针实质是一个对象,行为表现的却像一个指针。2.每次创建类的新对象时,...
2019-04-07 20:13:30
624
原创 UDP协议
UDP无链接、UDP服务器-客户端编程流程应用场景数据丢失影响不大视频,不能传文件代码实现服务器端#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include<sys/socket.h>#include<ne...
2019-04-07 20:01:01
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅