同步 --异步 --- 阻塞--- 非阻塞 ---半同步/半异步 --- 半同步/半反应堆

《一》同步和异步 I/O同步和I/O异步关注的是消息通知机制 I/O同步:是有消息处理者自己去等待消息是否被触发,(同步需要主动读写数据,在读写数据的时候还是会阻塞,要等待这两个操作成功才能返回) I/O异步:当所关注的消息被触发是,由消息触发机制通知触发对消息的处理、是由触发机制通知消息处...

2018-08-29 17:25:25

阅读数 80

评论数 0

内联函数和宏的区别

1、替换的时机 内联函数是在编译期间进行替换,就是将该函数在函数的调用点直接展开 宏函数是在预处理阶段替换 2、替换的成功率 内联函数只是对编译器的一个建议,如果编译器觉得该函数不适合成为内联函数时,便会忽略前面的[ inline ]关键字,比如我们将递归函数写成内联函数,编译器会忽略前面...

2018-08-23 14:02:24

阅读数 35

评论数 0

c++几个关键字-----Explicit、Mutable、volatile

Explicit关键字:阻止隐式转换的发生,声明为explicit的构造函数不能在隐式转换中使用。 隐式转换即是可以由单个实参来调用的构造函数定义了一个从形参类型到该类类型的隐式转换。编译器在试图编译某一条语句时,如果某一函数的参数类型不匹配,编译器就会尝试进行隐式转换,如果隐式转换后能正确编译...

2018-08-21 16:09:14

阅读数 29

评论数 0

堆和栈的区别

1、空间分配: 堆:手动申请、手动释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表 栈:系统开辟,系统释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、申请后系统的响应 只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示...

2018-08-21 13:17:42

阅读数 31

评论数 0

c++同名函数----重载、隐藏、覆盖

  《一》重载 重载的规则: 函数名称必须相同。 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。 函数的返回类型可以相同也可以不相同。 仅仅返回类型不同不足以成为函数的重载。 相同的范围(在同一个类中); virtual 关键字可有可无。 为什么需要函数重载? 试想...

2018-08-21 12:55:34

阅读数 1219

评论数 0

STL容器

容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map&a...

2018-08-20 18:15:05

阅读数 26

评论数 0

迭代器

《一》迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。 迭代器的分类: 1.输入迭代器(input iterator)功能 取出其所指向的值   访问下一个元素 判断是...

2018-08-20 17:36:03

阅读数 20

评论数 0

单例模式

单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象...

2018-08-20 15:28:56

阅读数 30

评论数 0

深拷贝和浅拷贝

对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部 数据。有两种类型的对象拷贝:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)。 浅拷贝只是对指针的拷贝,拷贝后...

2018-08-20 14:08:42

阅读数 126

评论数 0

c++的类型转换

c++中引入新的类型转换的原因:这是因为新的类型转换控制符可以很好的控制类型转换的过程,允许控制各种类型不同的转换.还有一点好处是C++的类型转换控制符能告诉程序员或读者我们这个转换的目的是什么,我们只要看一下代码的类型转换控制符,就能明白我们想要达到什么样的目的. ANSI-C++ 标准定义了...

2018-08-20 10:42:38

阅读数 32

评论数 0

c++设计模式-----工厂模式

《一》简单工厂模式 简单工厂模式是属于创建型模式,又叫做静态工厂方法(static Factory Method)模式,简单工厂模式是由一个工厂对象决定创建出来哪一种产品类的实例. 简单工厂模式的实质:是由一个工厂类根据传入的参数,动态决定应该创建哪一类产品类(这些产品类继承自一个父类或接口)...

2018-08-10 16:00:05

阅读数 38

评论数 0

c++继承

《一》单继承:派生类的直接基类只有一个 <1>继承的方式 class Base /*------------->基类/ 父类 */ { public: ...

2018-08-08 15:27:30

阅读数 21

评论数 0

一个程序在执行main函数之前都干了些什么?

《一 》怎么执行程序(如何把程序加载到内存上 首先内存需要的是数据和指令(机器语言)但是程序是高级语言, 1:先通过编译链接生成.exe文件(.exe文件在磁盘中存储,且.exe文件中是机器语言) 2:.exe文件通过mmap函数映射到虚拟内存上 3:再通过分段分页机制把需要的指令和数据加...

2018-08-08 09:27:39

阅读数 1938

评论数 0

gdb调试

debug 版本: 可调式版本 release 版本: 发行版本 gcc 默认生成 release 版本 gcc -o main main.c -g gcc -c main.c -g ---> debug 版本的中间文件 gcc -o main main.o ---&...

2018-08-06 18:34:57

阅读数 24

评论数 0

memcopy函数和memmove函数

memcpy:指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 函数原型:void *memcpy(void *dest, const void *src, size_t n); memmo...

2018-08-06 17:35:34

阅读数 108

评论数 0

进程和线程的区别

《一》概念 进程:进程是资源分配的最小单位,进程是运行中的程序  系统通过进程控制块(PCB)来管理进程,操作系统通过双向循环链表来管理所有的PCB变量 线程:线程是进程内部的一条执行序列, 一个进程至少有一个线程: 主函数的执行序列, 将其称之为主线程。 可以通过线程库创建其他的线程, 创建...

2018-08-06 15:44:24

阅读数 20

评论数 0

排序算法

排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。 稳定:如果a原本在b前面,而a=b,排序之后a...

2018-08-06 14:33:55

阅读数 28

评论数 0

c++中的临时量和对象的生存周期

《一》临时量的生成: 1.内置临时量:相当于一个常量  在存储器中存放 2.自定义类型:相当于产生一个变量临时量  在内存中存放 3.隐式生成临时量:相当于一个常量(const类型)不能用普通的引用来引用。例如赋值运算符重载函数的形参 4:显示生成临时对象:相当于生成了一个变量,可以用普通...

2018-08-01 15:17:53

阅读数 101

评论数 0

c++中的四个函数-----构造,析构,拷贝构造,赋值运算符重载

《一》构造函数(初始化一个对象不是申请空间) 可以重载(因为生而不同) 有this指针 对象不可以自己调用           原因:构造函数依赖对象调用所以只有对象生成了才能调用构造函数,但是生成对象需要调用构造函数(这就是一个先有鸡还是先有蛋的问题)(递归生成对象) 《二》析构函数(...

2018-08-01 14:45:56

阅读数 140

评论数 0

malloc和new的区别

malloc是从堆上开辟空间,而new是从自由存储区开辟;(自由存储区是 C++抽象出来的概念,不仅可以是堆,还可以是静态存储区); malloc/free是函数,而new/delete是关键字 malloc对开辟的空间大小需要严格指定,而new只需要对象名 ma...

2018-08-01 14:30:47

阅读数 36

评论数 0

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