- 博客(65)
- 收藏
- 关注
原创 struct和union大小计算规则
一:联合类型的定义联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)比如:共用了 i 这个较大的空间二: 联合的特点联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。由图可知: c 和 i 的起始地址一致。三: 联合大小的计算联合的大小至少是最大成员的大小。
2024-05-09 21:18:51
601
原创 stat 详细介绍及用法
n 或 --numeric:显示 IP 地址和端口号的数字格式,而不进行反向解析。-c 或 --continuous:连续显示结果,而不只显示一次。-p 或 --program:显示对应的进程 ID 和进程名称。-l 或 --listening:显示仅处于监听状态的端口。-s 或 --statistics:显示网络统计数据。-t 或 --tcp:显示 TCP 协议相关的连接。-u 或 --udp:显示 UDP 协议相关的连接。-a 或 --all:显示所有连接和监听端口。二、Netstat 的常见选项。
2024-04-25 13:52:36
413
原创 epoll合集
用于在 Linux 中管理异步 I/O 事件。组成部分:用法: 函数用于向文件描述符 引用的 实例执行控制操作。具体而言:以下是 函数的参数说明: 可以是以下几个宏的集合: 函数用于在 Linux 中创建一个 实例。让我们详细了解一下:定义:用法:优势:最大链接数 是 Linux 下的一个函数,用于等待事件的发生。它是 接口的一部分,用于高效地处理大量文件描述符的 I/O 事件。以下是 函数的详细描述:定义:返回值:
2024-03-16 21:25:46
845
原创 Linux线程(一)剖析
教材观点:线程就是一个执行分支、执行粒度比进程更细、调度成本更低线程就是进程内部的一个执行流内核观点:进程是承担系统资源分配的基本实体,而线程是CPU运行的基本单位线程是对以往进程概念的补充完善,正确理解线程概念是一件十分重要的事1.2 线程理解理解线程之前需要先简单回顾一下进程程序运行后,相关的代码和数据会被load到内存中,然后操作系统为其创建对应的PCB数据结构、生成虚拟地址空间、分配对应的资源,并通过页表建立映射关系进程之间是相互独立即使是父子进程,他们也有各自的。
2024-02-26 17:44:31
1019
原创 Linux进程 ----- 信号产生
信号 是信息传递的承载方式,一种信号往往代表着一种执行动作:上课铃声,红绿灯,电话铃声当然这些都是生活中的 信号,当产生这些 信号 时,我们会立马想到对应的 动作 ,这是因为 我们认识并能处理这些信号我们能进行处理是因为受过教育,学习了执行动作,但对进程来说,它可没有接受过九年义务教育,也不知道什么时候该干什么事于是程序员们给操作系统植入了一批 指令,一个指令表示一种特殊动作,而这些指令就是 信号(进程信号)
2024-02-20 18:06:42
847
原创 Linux进程间通信(三)-----System V消息队列
消息队列实际上就是在系统当中创建了一个队列,队列当中的每个成员都是一个数据块,这些数据块都由类型和信息两部分构成,两个互相通信的进程通过某种方式看到同一个消息队列,这两个进程向对方发数据时,都在消息队列的队尾添加数据块,这两个进程获取数据块时,都在消息队列的队头取数据块。其中消息队列当中的某一个数据块是由谁发送给谁的,取决于数据块的类型。生命周期是随内核的。
2024-02-17 15:55:53
861
1
原创 Linux进程间通信(二)-----system V共享内存
共享内存让不同进程看到同一份资源的方式就是,在物理内存当中申请一块内存空间,然后将这块内存空间分别与各个进程各自的页表之间建立映射,再在虚拟地址空间当中开辟空间并将虚拟地址填充到各自页表的对应位置,使得虚拟地址和物理地址之间建立起对应关系,至此这些进程便看到了同一份物理内存,这块物理内存就叫做共享内存。这里所说的开辟物理空间、建立映射等操作都是调用系统接口完成的,也就是说这些动作都由操作系统来完成。
2024-02-16 18:34:06
826
原创 Linux进程间通信(一)-----管道
管道是Unix中最古老的进程间通信的形式,我们把从一个进程连接到另一个进程的数据流称为一个“管道”。例如,统计我们当前使用云服务器上的登录用户个数。其中,who命令和wc命令都是两个程序,当它们运行起来后就变成了两个进程,who进程通过标准输出将数据打到“管道”当中,wc进程再通过标准输入从“管道”当中读取数据,至此便完成了数据的传输,进而完成数据的进一步加工处理。who命令用于查看当前云服务器的登录用户(一行显示一个用户),wc -l用于统计当前的行数。
2024-02-15 17:45:49
1107
原创 Linux环境变量剖析
概念:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序所将使用到的信息,总结用户一般通过shell跟内核通信,对于linux系统,具体的shell就是bash,从而就有了bash环境,在bash环境中就会有很多默认的环境变量,例如PATH,环境中储粮有环境变量还有自定义变量。如何理解变量:变量就是可以随意给其赋值的一个存储单元,其作用要么是被赋值要么是被读取值。
2023-12-24 14:25:12
893
原创 C++异常剖析
只有C++标准库自带的异常类型肯定是不够用的,我们实际工作中还需要根据项目需求定义新的异常类型。class DivisionZeroException :public exception//基于exception类定义新的异常类型除以0导致的异常类public://这里重载了父类的虚函数what()//throw ()的括号里面没有东西,这表示这个函数不会抛出任何异常//const 是常量的关键字,常量在定义后无法被修改return "出现了除以0的错误\n";trythrow e;
2023-12-08 21:59:31
1026
原创 C++智能指针剖析
memoryLeak1函数中,new了一个字符串指针,但是没有delete就已经return结束函数了,导致内存没有被释放,内存泄露!memoryLeak2函数中,new了一个字符串指针,虽然在函数末尾有些释放内存的代码delete str,但是在delete之前就已经return了,所以内存也没有被释放,内存泄露!使用指针,我们没有释放,就会造成内存泄露。但是我们使用普通对象却不会!智能指针就是通过这个原理来解决指针自动释放的问题!自动调用了析构函数。???
2023-12-06 15:45:36
808
原创 C++11新特性(上)
相比C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。
2023-11-29 16:37:10
900
原创 C++布隆过滤器,哈希切割
它的主要思想是让一个值映射多个位置。我们可以使用多个哈希函数,多映射几个位置,这里假设有两个哈希函数,映射两个位置。这样我们要看str2是否存在,必须要同时指向红色和绿色才能判断为存在。所以布隆过滤器的作用就是降低误判率。映射的位置越多,误判率越低。但是这里映射的位置也不能太多,映射的多,占的空间也多,找的次数也多,我们使用位图这样的方式就是为了提高效率并且节省空间。映射的多了也就没那么节省空间了。
2023-11-28 14:29:14
925
原创 C++位图(Bitmap)
首先普及一下将要用到的逻辑运算符号:【与】运算符号为 & ,运算法则为遇0得0。也就是说只要有0,结果即为0。【或】运算符号为 | ,就是一个竖线,运算法则为遇1得1。也就是说,只要有1,结果就为1。【非】预算符号为 ~,就是一个波浪线,运算法则为按位取反,也就是遇1取0,遇0取1,即 ~1 = 0 , ~0 = 1;【异或】运算符号为 ^,就是一个乘方符号,运算法则为相同取0,不同取1。异或运算,关键在异上面,异为1,否则为0。 位图 (Bitmap) 是一种基于位操作的数据结构,用于表示一
2023-11-24 11:20:45
3278
1
原创 C++哈希link
所以在开散列中的效率主要取决于桶的高度,这个我们可以通过控制平衡因子来进行调整。在大部分场景中当平衡因子为1时进行扩容。一个vector,每一个节点下面都可以挂一个单链,每一条单链表我们称之为一个哈希桶,以下即是开散列哈希表的示意图。通过最直观的观察,我们就可以发现,相比较与闭散列开散列更有条理,效率分析:在开散列哈希表中平衡因子最大为一,,不如改变节点的链接方式,将其直接插入到新的哈希桶上。概念:开散列哈希表 (拉链法实现)
2023-11-21 15:45:12
57
原创 C++哈希,闭散列哈希表
哈希表就是通过哈希映射,让key值与存储位置建立关联。在插入数据的时候,计算数据相应的位置并进行插入。计算key值所在的位置,并判断该位置的值是否等于key,如果等于查找成功。所谓哈希冲突,就是前后插入的key值通过计算,得到的存储位置的地址是相同的,这种现象就是哈希冲突,也称为哈希碰撞。可以把具有不同关键码而具有相同哈希地址的数据元素称为“同义词”。比如在上面的图中,可以看到2和4都为哈希冲突现象。引起哈希冲突的原因之一可能是哈希函数的设计不合理,即计算存储地址的算法出现了不合理。
2023-11-21 15:10:39
53
原创 多态详解(Linux)
多态就是函数调用的多种形态,使用多态能够使得不同的对象去完成同一件事时,产生不同的动作和结果。多态又分为静态多态和动态多态: (1)静态多态,也称为静态绑定或前期绑定(早绑定):函数重载和函数模板实例化出多个函数(本质也是函数重载)。静态多态也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。 (2)动态多态,也称为动态绑定或后期绑定(晚绑定):在程序运行期间,
2023-10-27 18:09:39
137
原创 虚函数详细理解
在实现c++多态时会用到虚函数。虚函数使用的其核心目的是通过基类访问派生类定义的函数。所谓虚函数就是在基类定义一个未实现的函数名,为了提高程序的可读性,建议后代中虚函数都加上virtual关键字。一般格式:上述代码在基类中定义了一个test的虚函数,所有可以在其子类重新定义父类的做法这种行为成为覆盖(override),或者为重写。常见用法:声明基类指针,利用指针指向任意一个子类对象,调用相关的虚函数,动态绑定,由于编写代码时不能确定被调用的是基类函数还是那个派生类函数,所以被称为“”虚“”函数。
2023-10-19 14:13:00
2221
原创 内存和磁盘
当CPU向内存中写入数据时,这些数据会被写入高速缓存中,同样地,当CPU需要读取数据时,会直接从高速缓存中直接读取,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容的CPU是需要通过程序计数器来指定内存地址而读出指令的。磁盘缓存指的是把从磁盘中读出的数据存储到内存中的方式,这样一来,当接下来需要读取相同的内容时,就不会再通过实际的磁盘,而是通过磁盘缓存来读取。
2023-09-21 15:57:42
350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人