摘要:
什么是进程: 程序加载进内存以后开始执行,执行中的程序就叫做进程。 linux下程序的加载过程: bash程序首先调用fork函数创建出一个新的进程,随后调用exec函数执行指定的elf文件,读取elf文件头,判断elf文件的文件类型,完成程序代码段,数据段到进程空间的地址映射。 linux下进程管 阅读全文
摘要:
方法1:将构造函数修饰成私有时,该类不能被继承。你也许可能会问,构造函数声明成私有,在外面使用时就不能创建对象了,不能创建对象的类还有意义吗?答案是有意义,单例模式就是将类的构造函数声明成私有的。 #include <iostream> using namespace std; class A { 阅读全文
摘要:
并发的概念: 计算机里面的并发是指单个系统同时执行多个独立的任务,而非顺序的一个任务一个任务的执行。 在单处理器的单核CPU里,虽然某一时刻只能有一个任务在执行,但是它可以不断进行任务切换,这个任务执行一会儿,再切换到别的任务执行一会儿,由于切换得很快,所以用户感觉像是多个任务在同时运行。单核实现并 阅读全文
摘要:
1:vector的底层实现原理是数组,占用连续的内存空间 #include <iostream> #include <vector> using namespace std; void init_vector(vector<int> &arr) { for (int i = 0; i < 10; i 阅读全文
摘要:
概念: 在一个类中,如果定义有指针成员变量,该指针指向new出来的堆内存。在用一个已经存在的对象初始化一个新对象时调用拷贝构造函数,如果拷贝构造函数中只是将已有对象的指针成员赋值给新对象的指针成员,那么就叫浅拷贝,浅拷贝以后两个对象中的指针指针成员指向同一个堆内存,在对象析构时,同一块堆内存会释放两 阅读全文
摘要:
结论: 实现多态时,我们通过基类指针指向子类对象,在delete基类指针时,我们希望先调用子类的析构函数,再调用父类的析构函数,要实现这个目的,析构函数就必须定义成虚函数,否则只会调用父类的析构函数,子类的析构函数不会被调用。 实验1:析构函数不定义成虚函数 #include <iostream> 阅读全文
摘要:
前言:大多数时候自己都是在写C++程序,本文记录一下打造自己的开发环境的过程,方便以后查阅,免得某些东西记不起来的时候还要去百度找。打造的开发环境是代码在Linux服务器上(构建)编译-链接-运行,在windows环境编辑代码。 用到的工具: VMware-workstation : 虚拟机 ubu 阅读全文
摘要:
我们在windows下用VS写代码,不管有多少个文件夹,有多少个文件,写完以后只需要一键构建就什么都搞定了。但是当移步linux下时,除非你使用linux的图形界面,并且使用Qt creater这类的IDE时,才可以继续像windows下一样一键搞定所有事情,否则就不得不接触gcc/g++/make 阅读全文
摘要:
内核空间和用户空间: 我们在编写程序时使用的内存空间叫虚拟内存,程序在运行时,要完成虚拟内存到物理内存的转换。假如在32位环境上,理论上我们可以使用的虚拟内存空间是4GB,但实际上这4GB并不能完全给我们使用,有一部分内存是固定分配给操作系统内核的,分配给操作系统的这部分内存我们叫它内核空间,除去内 阅读全文
摘要:
我们知道计算机中内存是以字节为单位划分的,CPU通过地址总线来访问内存,CPU一个时钟周期内能处理多少字节的数据,就命令地址总线读取几个字节的数据。举个例子:32位的CPU,一次能处理32bit的数据,也就是4字节的数据,那么CPU就命令地址总线一次性读取4字节的数据,即每次的步长都为4字节,只对地 阅读全文