摘要:
1.操作系统内存管理(虚拟内存) 1.1 虚拟内存的概念 操作系统为每个进程分配独立的一套虚拟地址,这就是虚拟内存。虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存,每个进程看到的内存都是一致的,称为虚拟地址空间。虚拟内存在主存中只保存活动区域,并根据需要在磁盘和主存 阅读全文
摘要:
19.C++内存分区 C++中的内存分区,分别是堆、栈、全局/静态存储区、常量存储区和代码区,如下图所示: 每个区域的含义如下: 栈:存储函数参数和局部变量,函数执行结束时自动释放,效率较高。 堆:堆是程序中预留的一块内存空间,由程序员自己管理,需要手动申请和释放,空间较大,但是操作不当会出现内存泄 阅读全文
摘要:
STL关联式容器中: set和map的底层数据结构为红黑树,因为map和set要求是自动排序的,红黑树能够实现这一功能,并且各个操作的时间复杂度都较低,而unordered_set和unordered_map的底层数据结构为哈希表,查找时间复杂度为常数级。 只要是前缀带了unordered的就是无序 阅读全文
摘要:
STL容器 STL 提供有 3 类标准容器,分别是序列式容器、关联式容器和无序关联式容器,其中后两类容器有时也统称为关联容器。如图所示: 序列式容器:所谓序列式容器,即以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据,需要特殊说明的是,该类容器并不会自动 阅读全文
摘要:
12.类和对象 12.1 类的封装 1.成员变量和成员函数 (1)成员变量 C++中用于表示类属性的变量。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存 阅读全文
摘要:
C++知识点总结 1.面向对象和面向过程 (1)面向过程程序设计 主要特点:主要包括数据结构+算法,分析解决问题所需要的步骤,定义函数实现各个步骤,最后调用函数解决问题 缺点:代码的可重用性和可维护性较差 (2)面向对象程序设计 概念:面向对象编程(OOP, Object Oriented Prog 阅读全文
摘要:
五大IO模型 socket在创建的时候默认是阻塞的,我们可以给socket系统调用的第2个参数传递SOCK_NONBLOCK标志,或者通过fcntl系统调用的F_SETFL命令,将其设置为非阻塞的。阻塞和非阻塞的概念能应用于所有文件描述符,而不仅仅是socket。我们称阻塞的文件描述符为阻塞I/O, 阅读全文
摘要:
1. I/O复用 1.1 I/O复用的基本概念 在服务器开发中,为了构建并发服务器,一种方案是采用多进程或多线程的方式,只要有客户端连接请求就会创建新进程或线程。但这种方案并非十全十美,因为创建进程和线程会有一定的内存开销,如果连接数很多,会需要大量的运算和内存空间,也会存在进程和线程切换带来的内存 阅读全文
摘要:
1.类型推导的语法和规则 C++11提供了auto和decltype来静态推导类型。 1.1 auto 类型推导 auto在之前的 C++ 版本中,auto 关键字用来指明变量的存储类型,它和 static 关键字是相对的。auto 表示变量是自动存储的,这也是编译器的默认规则,所以写不写都一样,一 阅读全文
摘要:
1.动态库和静态库简介 (1)动态库和静态库的概念 在C\C++中,头文件只存储变量、函数或者类等功能模块的声明部分,库文件才负责存储各模块具体的实现部分。 C\C++ 程序从源代码生成可执行程序,会经历四个过程,分别是预处理(Preprocessing)、编译(Compilation)、汇编(As 阅读全文