随笔分类 -  有用

c++单例模式
摘要:1.实现方法 [1]把构造函数设置为private,因此不能在外部创建实例,并且提供一个public方法访问实例。 [2]把析构函数是private和public都可以,private时需要定义一个垃圾回收类自动销毁这个实例,public时可以手动delete。 2.单实例销毁的方法 【1】把单例对 阅读全文

posted @ 2019-03-20 14:56 能量星星 阅读(204) 评论(0) 推荐(0)

c++对象内存管理
摘要:1.基础 每个对象有独立的数据成员(非static),但是内存中成员函数只有一份,该类的所有对象共享成员函数。 static数据成员属于类,该类的所有对象共享static数据成员,static数据成员存储在静态存储区。对象数据成员依据创建对象的方式不同,可能存在于栈上或者堆上。成员函数存储在代码段。 阅读全文

posted @ 2019-03-19 15:30 能量星星 阅读(524) 评论(0) 推荐(0)

c++内存对齐
摘要:1.为什么要内存对齐 内存存取粒度:大部分处理器并不是按字节块来存取内存的.它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存,我们将上述这些存取单位称为内存存取粒度。 以4字节作为存取粒度的处理器,只能从地址为4的倍数的内存开始读取数据。 假如一个int变量存放在从地址1开始的 阅读全文

posted @ 2019-03-19 15:10 能量星星 阅读(155) 评论(0) 推荐(0)

STL—set
摘要:1.set set底层用红黑树实现(每个元素的值都唯一,而且系统能根据元素的值自动进行排序)。并且set里面的元素是只读的,不可以直接修改,因为直接修改会破坏红黑树的结构。 由于使用红黑树,所以set的访问操作的时间复杂度是O(log(N))。 set的操作,例如插入、删除,并不需要执行内存拷贝和内 阅读全文

posted @ 2019-03-19 11:19 能量星星 阅读(208) 评论(0) 推荐(0)

c++模板
摘要:1.模板 模板的声明有两种:template <typename Type>或者template<class Type>,虽然建议使用typename以避免二义性,但是这两种实际上是都可以的。 函数模板: template <class type> ret-type func-name(parame 阅读全文

posted @ 2019-03-16 14:14 能量星星 阅读(239) 评论(0) 推荐(0)

c++虚表
摘要:1.虚表 基类指针可以指向基类对象,也可以指向派生类对象,实现多态的时候,是用基类指针指向一个派生类对象。 在同一个基类指针上调用同一个虚函数,会因为基类指针实际指向的对象不同而调用不同的函数,这就是所谓多态,基类指针只不过是个普通指针变量而已,所以靠这个指针是无法知道究竟应该调用哪个函数的。从头到 阅读全文

posted @ 2019-03-14 09:39 能量星星 阅读(1190) 评论(0) 推荐(0)

STL—vector
摘要:1.vector vector相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。 2.方法 size() 当前容器中元素的个数。 capacity() 当前容器的容量,包括已用和可用的大小。 resize(Container::size_ty 阅读全文

posted @ 2019-03-13 16:46 能量星星 阅读(124) 评论(0) 推荐(0)

C++拷贝构造函数
摘要:1.拷贝构造函数 拷贝构造函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变量。 拷贝构造函数必须以引用的方式传递参数。这是因为,在值传递的方式传递给一个函数的时候,会调用拷贝构造函数生成函数的实参,这样就会无限循环的调用下去,直到函数的栈溢出。 如果在类中没有显式地声明一个拷贝构造 阅读全文

posted @ 2019-03-08 16:44 能量星星 阅读(197) 评论(0) 推荐(0)

C++内存管理—new、delete
摘要:1.new和delete new的内部执行顺序: [1]调用operator new函数,该函数里面调用malloc申请内存。 [2]调用类的构造函数。 delete的内部执行顺序: [1]调用类的析构函数。 [2]调用operator delete函数,该函数里面调用free释放内存。 opera 阅读全文

posted @ 2019-03-08 15:52 能量星星 阅读(344) 评论(0) 推荐(0)

STL—map、hash_map、unordered_map
摘要:1.基本定义 map底层是用红黑树实现的,查找时间复杂度是O(log(n)); hash_map底层是用hash表存储的,查询时间复杂度是O(1); unordered_map和hash_map基本一样,只是unordered_map已经加到C++11标准(编译时添加编译选项:--std=c++11 阅读全文

posted @ 2019-03-08 11:29 能量星星 阅读(2485) 评论(0) 推荐(0)

动态绑定和静态绑定
摘要:1.静态类型和动态类型 为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。 对象的静态类型:对象在声明时的类型,是在编译期确定的。 对象的动态类型:当前所指向对象的类型,是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改 阅读全文

posted @ 2019-03-07 16:50 能量星星 阅读(332) 评论(0) 推荐(0)

C++重载、重写、虚函数、多态
摘要:1.重载、重写、重定义 重载:在同一个类中,函数名相同,参数列表不同,编译器会根据这些函数的不同参数列表,将同名的函数名称做修饰,从而生成一些不同名称的预处理函数,未体现多态。 重写:子类重新定义父类中有相同名称相同参数的虚函数,主要是在继承关系中出现的,被重写的函数必须是virtual的,如果vi 阅读全文

posted @ 2019-03-06 17:10 能量星星 阅读(297) 评论(0) 推荐(0)

Linux进程调度
摘要:1.调度 调度的重点是CPU处理任务的各种策略,线程实际上是共享一些资源的一系列进程而已,因此线程就是轻量级进程,因此在Linux中,线程的调度是按照进程的调度方式来进行调度的,也就是说线程是调度单元。 关于进程和线程的优先级: 进程的优先级取值范围是[-20, 20],值越低表示优先权越高,分给进 阅读全文

posted @ 2019-03-05 15:25 能量星星 阅读(1100) 评论(1) 推荐(0)

linux内存管理
摘要:1.内存管理概述 虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)是一个概念。内核的虚拟地址和物理地址,大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多级页表进行映射,但仍称之为线性地址。 2.进程内存空间 毫无疑问,所有进程都必须占用一定数量的内 阅读全文

posted @ 2019-03-04 14:38 能量星星 阅读(308) 评论(0) 推荐(0)

iptables和netfilter
摘要:1.iptables和netfilter说明 netfilter/iptables组成Linux平台下的包过滤防火墙,iptables是用户空间的管理工具,netfilter是内核空间的包处理框架。 2.数据包处理流程 首先数据包进入PREROUTING链,之后根据路由决策进入INPUT(本机)还是 阅读全文

posted @ 2019-03-04 14:09 能量星星 阅读(555) 评论(0) 推荐(1)

红黑树
摘要:1.红黑树的意义 二叉查找树在极端的插入情况下,操作时间复杂度会变为O(n),但是平衡二叉树可以一直维持在O(lg(n))。因此平衡二叉查找树的效率很高,红黑树是一种自平衡二叉查找树的实现方式,这便是红黑树的意义。 2.红黑树性质 [1]节点是红色或黑色。 [2]根节点是黑色。 [3]每个叶节点(N 阅读全文

posted @ 2019-03-04 14:03 能量星星 阅读(179) 评论(0) 推荐(0)

SOCKET编程(1)——接口函数
摘要:1.AF_INET、PF_INET: AF表示address families 地址簇,表示某个地址属于哪个簇,例如结构体struct sockaddr_in addr,里面的sin_family就是AF_INET,表示变量addr的地址簇是AF_INET。sockaddr_in的in就是表示是in 阅读全文

posted @ 2019-03-04 11:31 能量星星 阅读(468) 评论(0) 推荐(0)

TCP——(1)
摘要:1.TCP协议分析流程 [1]要分析整个TCP协议,需要从外向里去分析,首先就是分析af_inet.c,这个里面就是inet的接口函数,例如bind()、listen()等等,之后就是弄清楚这些函数(函数的参数)是要干什么。 [2]之后继续分析TCP的握手流程。 [3]之后继续分析TCP的数据传输流 阅读全文

posted @ 2019-03-04 11:24 能量星星 阅读(526) 评论(0) 推荐(0)

守护进程
摘要:1.守护进程 守护进程是在后台运行且不与任何控制终端管理的进程。Unix系统中有很多这样的进程,使用命令ps -axj可以显示此类进程。 一个守护进程的父进程是init进程,它是一个孤儿进程,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都被丢到了/d 阅读全文

posted @ 2019-03-04 11:10 能量星星 阅读(723) 评论(0) 推荐(0)

静态链接和动态链接
摘要:1.基础知识 程序由源代码变成可执行文件,一般可以分解为四个步骤,分别是: [1]预处理(Prepressing):预处理过程主要处理源代码中以“#”开始的预编译指令; [2]编译(Compilation) :编译过程把预处理完成的文件进行词法、语法、语义等分析并产生相应的汇编代码文件; [3]汇编 阅读全文

posted @ 2019-03-01 10:51 能量星星 阅读(3652) 评论(0) 推荐(1)

导航