08 2020 档案
摘要:首先new operator是c++内建操作符,行文是固定的,而operate new则是可以通过重载 来改变行为的,没有重载之前,是存在一个默认的全局operator new的操作符的,可以在一个 类的内部来重载operator new来实现针对于该类自身的内存分配策略。 除了上述的两种new 之
阅读全文
摘要:进程间通信的只要方式有,管道,有名管道,消息队列,共享内存,socket等方式,共享内存是最高效的 进程间通信的方式,因为把同一块物理内存的地址空间映射到不同进程的地址空间当中,那么不同的进程之间 通信,通过直接修改地址空间当中的内存即可,该机制的实现只需要两次拷贝即可实现,不需要像其它的进程 通信
阅读全文
摘要:EPOLL epoll是linux下锁独有的i/o复用的方式,不同于poll和select,前面两种方法都是使用一个函数实现,epoll采用三个函数进行实现, 分别为epoll_create()创建一个epoll句柄,可以往该句柄里面添加相应的描述符和事件。向epoll_create()创建的句柄当
阅读全文
摘要:产生core dump的原因: 1 数组访问越界。 2 使用非法的指针,使用了空指针或者说对随意的强制转换指针的类型。 3 堆栈溢出,申请了超过可用容量的堆栈空间。 产生core_dump的错误后,可以通过设置ulimit -c ulimited来开启生成 core文件的功能,会在当前文件夹下面保存
阅读全文
摘要:首先c++的多态分为两大类: 1 静态多态,是只在编译期间确定的多态,静态多态有两种实现的方式。第一种是函数的重载, 另一种是模板,静态多态在编译期间根据函数的参数类型推断出需要调用的函数。 2 动态多态,是运行时多态,该种多态的实现方式是需要通过虚函数机制实现,使用父类的指针 或者是引用去指向一个
阅读全文
摘要:内存泄漏是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 内存泄漏的分类: 1、堆内存泄漏 (Heap leak)。对内存指的是程序运行中根据需要分配通过malloc
阅读全文
摘要:inode(index node)也称其为索引节点,存储文件相关的信息,比如文件的创建者信息,所占的空间,权限相关信息, 以及文件block的地址等一系列信息,存储该结构也需要占据硬盘给的空间,因此在操作系统进行硬盘格式化的时候,将 硬盘分成两个部分,一部分用来存放数据,另一部分用来存放inode的
阅读全文
摘要:硬链接所对应的文件inode号是相同的,删除其中的一个硬链接不会影响到的其他的连接,只有 删除了全部的硬链接和源文件,才等于将源文件删除,可以通过使用link来创建硬链接,但是不可以 对目录文件创建硬链接。 软连接,也称之为符号连接,软连接的本身也是一个文件,具有和链接文件不同的inode,其内部
阅读全文
摘要:结构当中各个成员相对于结构首地址的偏移必须是其所占字节数的整数倍,空白的字节 自动的填充,申请空间的顺序按照成员在结构当中出现的顺序进行,在为最后一个成员申请 空间时,为了让整个结构体的大小是其中最大成员大小的整数倍,也需要将缺少的部分自动 的进行补齐。 同时结构体的起始地址也需要是能够被其中最大的
阅读全文
摘要:三次握手的原因是: 防止过期的连接请求到达服务器端,如果只有两次握手,则服务器端会建立一个不需要的连接, 因此会造成服务器资源的浪费。 四次挥手的原因: 发送fin请求的一方请求断开连接,但是另一方可能还有数据需要发送,因此可以选择不关闭本端的 连接,从而继续发送数据,而另一段发送fin的时间由其自
阅读全文
摘要:1 慢启动和拥塞避免算法 慢启动指的是,起始阶段将cwnd的窗口大小设置为mss,每当经过一个传输轮次,窗口的大小增加一倍, 也就是说一个rtt的时间内,窗口的大小增加一倍。 慢启动的过程当中,需要设置一个慢启动的门限,小于慢启动阈值时使用慢启动算法,当大于门限时,开 始使用拥塞避免算法,此时减慢c
阅读全文
摘要:当内存不断扩大的过程当中,页表项也会不断的增大,为了能够查找的效率,我们一般使用 连续的内存空间来存储页表,因此当页表项很多时需要很大一块的连续内存空间来存储页表项, 这样当内存紧张时对内存造成很大的浪费。 因此考虑使用多级页表的方式,以两级页表的情况举例,第一级页表称其为目录项,目录项 当中存储的
阅读全文
摘要:程序在进行函数调用时要跳转到函数的入口处去执行,此事需要保存当前的现场,调用完成之后还需要 恢复现场,因此函数的调用有一定的空间和时间的开销。 宏定义的使用类似函数,但是没有参数压栈,代码生成的开销,由预处理器来实现,调用的方式也是使 用简单的文本替换,不会对参数的类型以及返回值的类型进行检查,因此
阅读全文
摘要:内核栈是操作系统当中的一块固定的区域,用于保存中断现场,操作系统子进程之间的调用的参数和返回值。 用户栈是用户空间当中的区域,用于保存用户进程当中各个子程序之间调用的参数和返回值等信息。 当在用户态执行的程序由于中断进入内核态之后,会将原本的用户态的栈指针保存到内核栈中,从内核态返回 后会通过内核栈
阅读全文
摘要:进程的几种通信方式当中,使用共享内存的方法是最快的,因为进程间共享内存, 避免了数据的拷贝,所以比较快。实现共享内存的机制有以下两种: 1 mmap的方式,通过打开一个已经存在的文件,将文件映射到内存的地址空间当 中,进程可以像访问内存一样访问映射的文件区域,不需要以访问普通文件一样访问 映射后的文
阅读全文
摘要:fork和vfork的作用都是产生一个新的子进程,但是vfork的目的是产生了子进程 之后就立即调用exec来执行一个新程序,它不会讲父进程的地址空间完全的复制到子 进程的地址空间当中。 vfork和fork相比还有一个区别就是,vfork会保证子进程先运行,父进程只有在等 待子进程执行了exec或
阅读全文
摘要:右值,不能够用取地址&来获得对象内存地址的值。 右值引用,使用type&& 来取得对右值对象的引用,可以通过右值引用来对右值对象 进行相应的修改,定义了右值引用过后,对象会被存储到固定的内存位置当中,对右值 引用进行取地址的操作可以获得右值的存储地址。 左值一般是持久的状态,右值要么是字面值常量,要
阅读全文
摘要:一般而言,有多少个核心就可以同时运行多少个线程,但是如果线程的数目设置为 小于等于核心的数目的话,当某个线程不占用核心时就会造成内核资源的浪费,因此一 般设置的线程数目都是大于cpu的核心数目,这样能够保证内核能够被充分的利用,但是 如果线程的数量过多的话处理的效率会下降。 一般线程池当中线程的数量
阅读全文
摘要:粘包问题即主要的解决方法: 粘包问题的主要原因是,操作系统在发送数据前会先将数据存放在发送缓冲区当中, 发送数据过多或者过少都会造成当前发送的数据当中包含的是多个请求的内容,就造成 了粘包的问题。 1 发送端使用固定长度的包进行发送,若当前的包的长度不足指定的长度,使用空格 将剩余的长度补齐。收端按
阅读全文
摘要:1 client请求断开,发送fin,进入finwait1状态 2 server收到fin,发送ack进入close_wait状态 3 收到server的ack后进入,fin_wait2状态 4 server端发送fin,然后进入last_ack状态 5 client发送ack后进入timewait
阅读全文
摘要:拥有引用或者常量的类,不能含有默认的构造函数,因为默认的构造函数没有提供引用和常量的初始化方式,若使用默认构造函数, 会造成引用和常量未初始化的错误,因此引用和常量的初始化过程必须放在构造函数的初始值列表当中完成,这样才不会造成引用会常量 未初始化的错误。
阅读全文
摘要:1 如果当前的类当中为空,或者没有数据成员,则该类对象的大小为1个字节。 2 类当的成员函数无论是静态还是非静态的都不会占用类对象的空间,此外静态的数据成员也不会占据类成员的空间。 3 虚函数会在每个对象上面增加一个虚函数表的指针,指针大小根据操作系统来决定。 4 虚继承会因为有虚基表的指针对类对象
阅读全文

浙公网安备 33010602011771号