自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 网络复习二(TCP【3】)

MSL:报文最大生存时间我们要知道TCP报文是基于IP协议生存的,而在IP头中有一个TTL(经过路由跳数),当TTL为0使,数据报被丢失,同时发送ICMP报文通知主机因此MSL的时间应该大于等于TTL消耗为0的时间(Linux设置MSL=30秒)我们再来说一说为什么TIME_WAIT为什么是2MSL?2MSL是从客户端收到FIN发送ACK开始计时的。

2025-04-14 21:27:32 377

原创 C++ ------ 智能指针

在任何时刻,只能有一个指针管理内存。当指针超出作用域时,会自动释放内存,该类型指针不可拷贝(copy),但可移动(move)。1)通过new来创建;2)通过std::make_unique创建(推荐)1)可以通过->调用成员函数;2)可以通过*返回管理对象的引用,从而直接访问对象1)unique_ptr可以通过get()获得指向被管理对象的指针2)reset替换被管理对象3)release释放被管理对象4)swap交换被管理对象。

2025-04-13 18:30:43 902

原创 操作系统 ------ I/O多路复用

select、poll、epoll都是内核提供给用户态的多路复用系统调用,进程可以通过一个系统调用函数从内核中获取多个事件。

2025-04-13 15:17:55 412

原创 操作系统 ------ 五种IO模型

一个IO请求操作,准备阶段和复制阶段都会阻塞应用程序,直到操作完全完成一个IO操作请求,先判断准备阶段是否完成,如果未完成立即返回,否则,进入复制阶段,在这个复制阶段是阻塞的,直到操作完全完成同步IO包含阻塞IO和非阻塞IO,所以这里的同步指的是IO操作请求的完全完成。不论是阻塞还是非阻塞IO在复制阶段都是阻塞的。一个IO操作请求就立刻返回,直到准备阶段与复制阶段都完成了,内核才通知应用程序。这时候应用程序可以直接操作用户系统了数据准备+数据读写IO=等待+拷贝。

2025-04-12 17:15:59 599

原创 【STL】------vector使用

1.vector的数据元素存储空间可以动态变化大小的序列容器2.vector的数据元素使用连续的存储空间,可以使用常规指针,指向其元素,使用偏移量来访问存储空间中的数据元素3.vector与数组不同,vector存储空间大小可以动态变化,容器会自动扩容存储空间4.vector使用一个动态分配的连续存储空间来存储元素。在插入新元素时存储空间可能需要重新分配,以便增大存储空间,这意味着分配一个新存储空间要将所有的元素移动到其中。就处理时间而言,这是一项相对费时的任务。

2025-04-02 13:45:03 672

原创 C++ ---- 虚继承

虚继承就是子类中只有一份间接父类的数据。用于解决多继承中的父类为非虚继承时出现的二义性问题,即菱形继承问题。继承方式需要加上virtual关键字。

2025-04-01 17:52:04 579

原创 epoll内核源码刨析【简略版】(2)

先用epoll_create创建一个epoll对象epfd,再通过epoll_ctl将需要监视的socket添加到epfd中,最后调用epoll_wait等待数据。

2025-03-30 16:34:22 300

原创 malloc分配内存

为了改进这两个问题,malloc 通过 brk() 系统调用在堆空间申请内存的时候,由于堆空间是连续的,所以直接预分配更大的内存来作为内存池,当内存释放的时候,就缓存在内存池中。等下次在申请内存的时候,就直接从内存池取出对应的内存块就行了,而且可能这个内存块的虚拟地址与物理地址的映射关系还存在,这样不仅减少了系统调用的次数,也减少了缺页中断的次数,这将大大降低 CPU 的消耗。方式申请的内存,free释放内存的时候,并不会把内存归还给操作系统,而是缓存在malloc的内存池中,待下次使用;

2025-03-29 22:44:44 327

原创 操作系统篇【内存管理】

操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来MMU:CPU芯片中的内存管理单元。

2025-03-29 22:05:26 507

原创 网络复习二(TCP【2】)

当服务端(被关闭方)收到客户端(主动关闭方)的FIN报文后,内核会自动回复ACK,同时连接处于CLOSE_WAIT状态,顾名思义,他表示等待应用进程调用close函数关闭连接。服务端处于CLOSE_WAIT状态时,调用了close函数,内核就会发出FIN报文,同时连接进入LAST_ACK状态,等待客户端返回ACK来确认连接关闭。在上一篇文章提到过,ACK报文是不会重传的,所以如果服务端的第二次挥手丢失了,客户端就会触发超时重传机制,重传FIN报文(第一次挥手)若收不到这个ACK,服务端就会重发FIN报文。

2025-03-23 19:00:50 899

原创 网络复习二(TCP篇【1】)

三次握手才可以阻止重复历史连接的初始化(主要原因)三次握手才可以同步双方的初始化序列号三次握手才可以避免资源浪费原因一:避免历史连接首要原因是为了防止旧的重复连接初始化造成的混乱两次握手连接为什么无法阻止历史连接呢?在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接,导致服务端可能建立一个历史连接,造成资源浪费原因二:同步双方初始序列号接收方可以去除重复的数据接收方可以根据数据包的序列号按序接受可以标识发送出去的数据包中,那些是已经被对方收到的(通过ACK报文中的序列号知道)

2025-03-23 17:54:56 928

原创 网络复习一(DNS)

根域是在最顶层,他的下一层就是.com,在下一层就是server.com。www.server.com.(在域名中,越靠右表示层级越高)

2025-03-23 15:23:50 165

原创 C++四种类型转换

dynamic_cast转换操作符在执行类型转换时首先将检查能否成功转换,如果转换失败,T是指针则反回一个nullptr,如果是转换的是T引用,则抛出一个bad_cast异常。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。指针转换的限制:类型与将要赋值的类型保持一致,不允许在不同类型间进行转换,可以将普通指针给常性指针。进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是。在内置的数据类型之间互相转换,对于类只能在有联系的指针类型间进行转换。

2025-03-15 21:03:03 332

原创 poll和epoll内核原码刨析(1)

_poll_wait的作用就是创建所示的数据结构,并通过struct poll_table_entry的wait成员,把current挂在了设备的等待队列上,此处的等待队列是wait_address。注意438行的set_current_state和445行的signal_pending,它们两句保障了当用户程序在调用poll后挂起时,发信号可以让程序迅速推出poll调用,而通常的系统调用是不会被信号打断的。440-443行,当用户传入的fd很多时,对do_pollfd就会调用很多次(问题二)

2025-03-11 22:10:35 833

原创 冒泡、插入、选择

1.首先有两层循环,外层循环是用来进行遍历的2.内层循环从0开始遍历len-i-1次,-i是为防止与已经排好的元素进行比较,从而导致出错,-1是为了防止溢出3.使用if进行判断,始终保持从小到大,若相邻两元素不满足此条件,两两进行交换。

2024-08-22 15:00:15 181

原创 构造函数与析构函数

构造函数是特殊的公有成员函数(在特殊用途中构造函数的访问限定可以定义成私有或保护)特征具体描述函数名函数名与类名相同无函数返回类型构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可写void。实际上构造函数有返回值,返回的就是构造函数所创建的对象(返回对象的地址,或返回)调用在程序运行时,当新的对象被建立,该对象所属的类构造函数自动被调用,在该对象所属的类构造函数自动被调用,在该对象生存期中也只调用这一次函数重载构造函数可以重载。

2024-07-09 16:44:16 1712

原创 C++对象模型讨论与this指针

上图是系统为每一个对象分配了全套的内存,包括安放成员数据的数据区和安放成员函数的代码区。但是区别同一个类所实例化的对象,是由属性(数据成员)的值决定,不同对象的数据成员的内容是不一样的;而行为(操作)是用函数来描述的,这些操作的代码对所有的对象都是一样的。

2024-07-08 15:54:23 276

原创 类型推导(auto、decltype)

auto定义的变量,可以根据初始化的值,在编译时推导出变量名的类型(auto必须初始化)对于系统来说12.23认为是double, 12.23f为float。

2024-07-07 19:39:07 333

原创 new/delete(常规new)

new和operator new在内存不足时,申请失败,抛出异常,(std::bad_alloc)2.malloc申请内存空间时,手动计算所需大小,new只需类型名,自动计算大小;5.malloc申请内存空间失败时,返回的是NULL,使用时必须判空;4.malloc的返回值为void*,接收时必须强转,new不需要;6.new申请内存空间失败时抛出异常,所以要有捕获异常处理程序;3.malloc申请的内存空间不会初始化,new可以初始化;对于new来说判空无意义,而malloc有意义。

2024-07-06 20:02:34 256

原创 函数重载和名字粉碎

在c++中可以为两个或两个以上的函数提供相同的函数名称,只要,或,称为函数重载。编译器的工作:1.当一个函数名在同一个域中被声明多次时,编译器按照如下步骤解释第二个(以及后续的)的声明。2.如果两个函数的参数表中参数的个数或类型或顺序不同,则认为这两个函数是重载。

2024-07-05 17:47:21 1495

原创 动态二维数组与静态二维数组的区别

此代码所编译的为静态二维数组,定义了一个有row行col列的静态二维数组。

2024-07-05 15:13:30 149

原创 引用(别名)

类型 & 引用变量名称 = 变量名称&和类型结合称之为引用符号,不是取地址的符,代表别名意思。引用分为左值引用、右值引用。

2024-07-04 16:03:38 1463

原创 const关键字

在c++中,汇编的过程会将所遇到的常量更换为其代表的值,即ar[n]==>ar[10];

2024-07-03 17:18:39 175

原创 Linux——fork函数

/argc参数个数//argv参数内容//envp环境变量。

2024-03-16 14:34:22 401 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除