自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux共享内存解析

共享内存是一种允许不同进程直接访问同一块内存区域的机制。

2025-06-12 21:36:44 434

原创 进程间通信

进程是操作系统分配资源的基本单位,是正在执行的程序实例。每个进程都有自己独立的内存空间和系统资源。

2025-06-03 19:48:12 566

原创 -动静态库简单使用

静态库在编译时由链接器将库中的代码直接复制到可执行文件中。这意味着每个使用静态库的可执行文件都包含库代码的副本。

2025-05-27 20:30:25 791

原创 C++中IOstream解析

可以通过重载<<和>>操作符,实现用户自定义类型的输入输出。// 重载输出操作符return os;// 重载输入操作符return is;Point p;return 0;

2025-05-23 17:54:54 727

原创 用户缓冲区

合理管理用户缓冲区的内存,避免缓冲区溢出和数据损坏。在进行I/O操作时,数据首先被复制到用户缓冲区,然后由应用程序处理。在I/O操作中,缓冲区用于存储从设备读取的数据或即将写入设备的数据。数据首先从用户缓冲区复制到内核缓冲区,然后从内核缓冲区写入设备。数据首先被复制到内核缓冲区,然后从内核缓冲区复制到用户缓冲区。缓冲区过小会导致频繁的I/O操作,缓冲区过大则可能浪费内存。直接I/O绕过内核缓冲区,直接在用户空间和设备之间传输数据。在进行I/O操作时,务必进行错误检查和处理,确保数据的完整性和系统的稳定性。

2025-05-21 18:48:08 787

原创 进程替换讲解

系列函数用于在当前进程中执行一个新程序。常见的函数包括:这些函数的命名规则如下:函数原型: 参数: 例子:2.2 函数原型:参数:例子:2.3 函数原型:参数:例子:2.4 函数原型:参数:例子:2.5 函数原型:参数:例子:2.6 execvpe() 参数 :要执行的可执行文件的名称。如果 中包含斜杠 (),则将其视为路径名,直接尝试执行。(如果 不包含斜杠,则会在 环境变量指定的目录中查找可执行文件。)

2025-05-15 19:15:19 939

原创 进程等待简单讲解

当一个进程终止时,它会向其父进程发送一个信号(通常是SIGCHLD),并保存退出状态(exit status)。退出状态可以是一个正常终止的返回值,也可以是一个信号导致的终止。

2025-05-13 18:24:28 487

原创 linux进程控制

进程是操作系统分配资源的基本单位,是正在执行的程序实例。每个进程都有自己独立的内存空间和系统资源。

2025-05-12 19:25:50 365

原创 C++线程库

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以并发多个线程,每条线程并行执行不同的任务。

2025-05-09 18:49:45 299

原创 Linux进程解析

1.进程的定义:2.进程与程序的区别:每个进程在内存中有自己独立的地址空间,通常分为以下几个部分:1.代码段(Text Segment):2.数据段(Data Segment):3.堆(Heap):4.栈(Stack):5.内核空间(Kernel Space):6.用户空间(User Space):1.创建:2.运行:3.等待:4.停止:5.终止:Linux采用抢占式多任务调度机制,允许多个进程并发执行。调度算法决定了哪个进程在何时获得CPU资源。1.调度策略:2.调度算法:进程间通信是指不同进程之间交换数

2025-04-26 18:14:10 597

原创 Linus的权限问题

在Linux系统中,是确保系统安全性和资源访问控制的重要机制。Linux采用基于用户(User)、用户组(Group)和其他用户(Others)的权限模型,通过设置不同的权限来控制对文件和目录的访问。

2025-04-22 20:01:10 577

原创 C复习(主要复习)

指针和数组 函数指针:函数指针的定义需要指定函数的返回类型、参数列表以及指针的名称。//return_type (*pointer_name)(argument_type1, argument_type2, ...); Strlen和字符数组: 库函数模拟实现手撕Memcopy: 实现Mommove:实现strstr 自定义类型:内存对齐: 解释:这次是对C中我还不清楚并且比较重要的知识进行总结,顺序可能会有点乱,还请见谅

2025-04-16 20:09:11 498

原创 类型转换

用户可以通过定义转换构造函数或转换运算符来实现自定义类型之间的隐式转换。

2025-04-13 18:47:42 786

原创 单例用例(C++)简单分析

是一种创建型设计模式,它确保一个类在程序运行期间只有一个实例存在,并提供一个全局访问点。这个模式在需要全局控制资源(如配置管理、日志系统、线程池等)时非常有用。

2025-04-11 18:28:17 296

原创 指针指针的实现

上一篇文章简单介绍了一下智能指针,这次我们简单讲解一下实现和具体的例子,及分析。

2025-04-10 18:53:58 268

原创 智能指针C++11

独占所有权auto_ptr拥有对动态分配对象的唯一所有权。拷贝语义:拷贝一个auto_ptr会转移所有权,而不是进行深拷贝。这意味着拷贝后,原来的auto_ptr将不再拥有对象的所有权。不可拷贝赋值:不能进行拷贝赋值操作,但可以通过拷贝构造函数进行所有权转移。举例// 拷贝构造,转移所有权return 0;//输出ptr1通过分配了一个整数对象。ptr2(ptr1)通过拷贝构造转移了ptr1的所有权,导致ptr1不再拥有对象的所有权,其内部指针被置为nullptr。

2025-04-08 17:47:51 745

原创 C++中lambda的用法

Lambda 函数可以捕获其定义作用域内的变量,这使得它们在处理局部数据时非常有用。例如,在使用标准库算法时,可以方便地访问和操作外部数据。通过将代码逻辑封装在lambda函数中,可以避免代码重复,提高代码的可复用性。同时,lambda函数可以使代码逻辑更加模块化,增强可维护性。Lambda 函数允许在需要时内联定义函数,避免了为简单操作单独声明命名函数的麻烦。这使得代码更加简洁和易读。希望这篇文章有助于你了解lambda的用法,如果有误还请评论区纠正。

2025-04-07 19:09:12 427

原创 左值引用和右值引用

左值是指那些具有持久存储和可标识位置的表达式,通常可以出现在赋值运算符的左侧。左值代表一个具有名称的、可寻址的内存位置。右值是指那些没有持久存储或不可寻址的临时值,通常出现在赋值运算符的右侧。右值代表一个临时的、不可被修改的值。左值引用是对一个持久对象的引用,通常用于函数参数传递和返回值的优化。它使用单个符号表示。右值引用是对临时对象的引用,通常用于实现移动语义和完美转发。它使用双&&符号表示。

2025-04-05 17:17:01 877

原创 布隆过滤器-简单分析

布隆过滤器是一种高效的概率性数据结构,用于快速判断一个元素是否存在于一个集合中。它在空间和时间效率上具有显著优势,但存在一定的误判率。

2025-04-01 18:37:33 905

原创 哈希扩展-位图

用位数组来表示集合的数据结构,对每个位对应一个元素的存在性(1存在,0不存在),下图可以让我们清晰的了解位图的基本概念:在计算机中存储整型数据结果只有两个:存在或者不存在。而二进制中的1/0也可以表示存在与不存在,借此我们可以用一个二进制的比特位来表示存储的数据是否存在,从而节省空间,这样的方法需要我们学习,看下面面试题:这道题倘若用遍历或者二分查找等方法会消耗大量的内存空间,此时我们便可以用位图来解决,从而减少内存空间开销。

2025-03-31 19:01:09 263

原创 哈希表解析

就是将键值映射到哈希表中的索引,一般好的哈希函数应该尽量减少冲突,对于不同的键值映射到相同的索引概率应当要小。常见的函数:-除留余数法:即使用键值对哈希表取模进行映射。-乘法哈希:乘以一个常数值取小数部分生成哈希值。-字符串哈希:对字符串每个字符进行计算,生成对应哈希值。

2025-03-27 19:27:57 355

原创 红黑树解析

int key;bool col;:key(key), col(1)//1为RED,0为BLACK{}1.当叔叔节点存在且为红,则变色,向上更新。2。当叔叔节点不存在或者存在且为黑,旋转+修正颜色。

2025-03-24 20:45:23 608

原创 [数据结构]AVL树(详解)

左右子树都是AVL树-左右子树的平衡因子的绝对值不超过1。-符合搜索二叉树的基本性质。

2025-03-21 18:44:14 398

原创 C++中vector的用法及解析

vector是一种动态数组,其能在运行时依据需要自行调整大小,它不需要在编译时确定大小。并且它的内部使用一个连续的内存块进行存储,代表其可以通过对元素的快速随机访问。

2025-03-18 19:52:07 346

原创 C++ 异常处理

标准异常类可以在C++标准库中查看,这里不再赘述。通常,我们会自己定义异常类。if (b == 0)//除数为0,抛异常elseint main()try {Func();}*///类型不匹配则会终止程序一般情况,自定义异常类会继承它的派生类。//这里继承的是标准库的异常类public:return msg;//输出Caught MyException: My custom exception occurred.

2025-03-17 20:53:00 334

原创 C++ map基本用法

map的定义需要指定键(key)和值(value)的类型,举例。

2025-03-16 20:21:02 213

原创 搜索二叉树

3.当删除的节点有俩个子节点,寻找节点替代(两种方法),寻找左子树中最大的节点或右子树中最小的节点,交换当前节点的值,然后删除替代的节点。实现前我们应该分析其一些功能,这里只实现:搜索,插入,删除,遍历(中序)。1.该树的节点的左子树只包含小于该节点的值(左边比节点值小)2.该树的节点的右子树只包含大于该节点的值(右边比节点值大)2.当删除的节点只有一个子节点,用字节的替代被删除的节点。1.当删除的节点为叶子节点,直接删除。4.没有节点值相同的情况(通常)我们简单建立一个模板。

2025-03-12 20:23:22 150

原创 C++虚表的简要说明

虚表是一个数组指针,其中每个元素都是指向虚函数的指针。(编译器里面是_vptr)它的虚表如图。

2025-03-11 19:46:02 227

原创 C++中多态的常见问题

当我们将派生类对象赋值给一个基类对象时,派生类中特有的部分会被切掉,保留的只是基类的部分,同时导致多态性失效,这是因为保留的是基类对象,而不是派生类对象。基类的虚构函数若不是虚函数,则我们通过基类指针删除派生类对象时,只会调用基类的析构函数,导致派生类的析构函数未调用,导致内存泄漏。这个例子在基类的构造函数中调用虚函数,但实际调用的是基类的func()(此时派生类的func()未构造)其中若b不是指向test()对象的指针,转换失败,返回nullptr,需进行检查避免未定义。用基类指针或引用避免对象切片。

2025-03-10 20:38:08 201

原创 C++多态(简要分析)

多态是C++中用不同对象通过统一接口进行交互,从而实现代码的灵活性和可扩展性,主要通过函数重载,函数重写和虚函数实现;

2025-03-08 18:50:43 311

原创 C++的继承(常用)

基本分为继承的类(派生类或子类)和被继承的类(基类或父类),主要目的是实现代码的复用和多态性基本模式如下。

2025-03-07 20:03:08 300

原创 特化的简要讲解

在C++中,特化用于为特定类型或类型模式提供定制的实现,其主要分为“全特化”和“偏特化”。我们今天来了解一下特化。

2025-03-06 19:52:10 185

原创 C中位段的解释

这个例子中,struct NUM 有4个成员,正常来说这四个字节各占32位宽,但是我们指定占位,将其位宽分别指定为5,10,15,20。所以它整个结构体所占的字节空间也发生改变,并不是原来的16个字节,而是8个字节。我们来解析一下为什么。我是用vs2019运行的,我们用它监视,查看s的地址如果是5A 0C 0D,这就是在位宽不足下个数的情况下会浪费空余位宽,这个留给大家自己运行了。这里我们又会产生疑问,剩余2位宽,那么d会不会使用这剩余的2位宽呢?-位数:指定该成员的位数。-成员名:位段的名称。

2024-09-12 17:33:25 199

原创 位操作符详解

常用的位操作符有这几个:"&"(按位与),"|(按位或)","^(按位异或)","~(按位非)","(右移)"。按位异或操作符将两个数的二进制表示进行逐位比较,当两个相应位不同时,结果取1,反之取0,上例子(题外话 我们需了解的是 a^a=0,a^0=a,大家可以自己动手验证一下。按位或操作符将两个数的二进制表示进行逐位比较,只要两比较位中有一个为1,则结果取1,反之取0,上例子。按位与操作符将两个数的二进制表示进行逐位比较,两相同位为1是,结果取1,反之取0,直接上例子。

2024-08-02 18:31:12 718

原创 原码,反码和补码

反码应用于负数,而且我们要了解的是正数的反码和补码是相同的,而负数的反码是全部取反(即1变为0,0变为1),至于符号位变不变这取决与你的编辑器,大部分都是符号位不变的,有一部分会符号位取反。原码为最直观的二进制表示方式,他是将一个数值直接转换为二进制,而且我们要注意的是,在原码表示法中,左边第一位是表示符号的,并且0表示正数,1表示负数,其余就按二进制读取。补码是计算机最常用的表示方法,它的目的是简化运算,正数的补码和原码相同,而负数是原码取反+1(就是负数的反码+1).

2024-08-01 18:09:44 224

原创 C语言中动态内存管理

realloc 用于调整之前通过malloc,calloc或已经用过realloc分配的内存块的大小,若新的大小大于原始大小,realloc可能会分配一个新的内存块,若小于原始内存大小,realloc则会截断原始内存块。p为指向之前通过malloc,calloc或已经用过realloc分配的内存块的指针,若传入NULL,realloc和malloc类似,分配一个新的内存块。并且检查分配是否成功,检查其指针是否为NULL,以确保内存分配成功。函数返回一个指向分配的内存块的指针,若分配失败,返回NULL。

2024-07-31 18:35:21 166

原创 putchar和getcahr用法

1 putchar是一个用于输出单个字符的函数,而printf是格式化输出的函数,其输出的类型多余putchar。其中c为要输出的字符,其可以为int类型,也可以为char类型,为int 类型时我们可以以此判断是否输出成功。返回读取到的字符,但返回的是int类型所以返回的是字符的ASCII码,如果到达文件末尾或发生读取错误,返回。2 putchar只能接受一个字符参数,而printf可以接受多个参数,包括格式字符串和多个输出的值。是一个简单的函数,用于逐个字符地读取输入,而。用于更复杂的输入格式化。

2024-07-30 18:24:18 251

原创 二分法及递归和迭代

要实现二分查找我们得先确定查找的范围,其次在查找范围内,计算索引mid,同时可能会有人询问为什么是mid=left+(right-left)/2,而不是mid=(left+right)/2,这里我们需要了解的是当其定义的数很大的时候它有可能超出了int可定义的范围(我们可以试试INT_MAX这个代码求出int的最大值为2147483647),当left=INT_MAX-1的时候它们相加会溢出,导致乱码,所以我们用的是我们这个例子,防止溢出。基本情况:其终止的条件,阻止其无限递归。举相同的例子,但用迭代。

2024-07-29 18:34:44 482

原创 C语言中函数定义

这个例子它告诉编译器这里存在名为add的函数,其接受两个int类型的参数,而且会返回一个int类型的结果,结果为 a+b;同样我们需要知道的是我们在定义函数时,我们定义的函数类型是什么同样其表达式返回的就是什么类型。这里我们让其返回int类型,但是返回了float类型,这种不匹配会导致编译错误,我们应该注意。如果定义函数类型和函数返回值类型不匹配,可能会导致程序崩溃,数据损坏等结果。当然这个例子比较简单,等我们熟练后可以写更复杂的。这里我们只是举了一个如何定义的例子接下来我们实操。

2024-07-27 18:32:20 230

原创 C语言中循环概念及结构

C语言中的循环

2024-07-26 18:55:29 433

空空如也

空空如也

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

TA关注的人

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