C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现。 构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同) 首先说 ...
C++中static、const和static const的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是 ...
TIME_WAIT和CLOSE_WAIT状态解析
什么是TIME-WAIT和CLOSE-WAIT ? 众所周知,由于socket是全双工的工作模式,一个socket的关闭,是需要四次握手来完成的: 1)主动关闭连接的一方,调用close();协议层发送FIN包 ; 2)被动关闭的一方收到FIN包后,协议层回复ACK;然后被动关闭的一方,进入C ...
进程和线程的五种状态(生命周期)
进程和线程在创建到销毁的过程中,都会经历五种状态的转换。具体如下: 进程 创建:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。 就绪:进程已经准备好,已分配到所需资源 ...
malloc底层实现原理
对于malloc,以前只知道如何用,却不知道它的内部实现原理。这次特意学习了一下,做个记录。下面分析均是基于linux环境下的malloc实现。先总结结论,再逐步展开。 结论 1)当开辟的空间小于128K时,调用brk()函数,malloc的底层实现是系统调用函数brk(),其主要移动指针 ...
优先队列的理解-与堆排序的比较
优先队列 priority_queue,头文件#include 。 priority_queue<int, vector, greater> 表示队列内部是小顶堆,队列输出为升序序列(输出过程是小的先输出)。 priority_queue<int, vector, less ...
网络编程学习笔记(五)--select、poll、epoll比较
select介绍 select创建了3个文件描述符集(fd_set)并拷贝到内核中,分别监听读、写、异常动作。select可以监听的文件描述符受到单个进程所能打开的fd的限制,默认为1024。采用轮询方式,遍历所有的fd,最后返回一个文件描述符是否就绪的mask掩码,并根据mask掩码给fd_se ...
网络编程学习笔记(四)--几种高性能方案
I/O多路复用 我们假设设计了这样一个应用程序,该程序从标准输入接收数据输入,然后通过套接字发送出去,同时,该程序也通过套接字接收对方发送的数据流。我们可以使用fgets方法等待标准输入,但是一旦这样做,就没有办法在套接字有数据的时候读出数据;我们也可以使用read方法等待套接字有数据返回,但是这 ...