自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (11)
  • 收藏
  • 关注

原创 高并发内存池(回收)[4]

这段代码的作用是将Span回收给PageCache,并尝试进行前后页的合并,以缓解内存碎片问题。合并的条件包括前后页存在且未使用,并且合并后的Span的页数不超过NPAGES-1。这段代码的作用是将一组内存块释放到对应的Span中,并在Span的使用计数变为0时将Span回收给PageCache。的实现,用于将Span回收给PageCache,并尝试进行前后页的合并,以缓解内存碎片问题。的实现,用于释放一组内存块到对应的Span中。,分别表示要释放的内存块的起始地址和大小。

2023-08-22 15:09:03 1020

原创 linux学习(软硬链接+静态库)[15]

删除任何一个硬链接不会影响其他硬链接和目标文件,只有当所有硬链接和目标文件都被删除时,才会释放文件的磁盘空间。总结来说,软链接是一个指向目标文件或目录的路径,可以跨文件系统,可以指向不存在的文件或目录,删除软链接不会影响目标文件或目录。而硬链接是多个文件项共享相同的索引节点和数据块,只能在同一个文件系统中创建,不能指向目录,删除任何一个硬链接不会影响其他硬链接和目标文件。软链接是一个特殊的文件,它包含了指向目标文件或目录的路径。是指要创建链接的文件或目录的路径,是指创建的链接文件的路径和名称。

2023-08-21 17:36:53 132

原创 高并发内存池(PageCache)[3]

共128页centralcache向pagecache申请2page时,首先向下扫描,有大的会切分出来,然后再挂在对应桶当中。

2023-08-21 11:13:46 139

原创 linux学习(文件系统+inode)[14]

内存–掉电易失存储介质磁盘–永久性存储介质 - SSD,U盘,flash卡,光盘,磁带磁盘是一个外设+计算机中唯一的机械设备

2023-08-20 17:45:58 111

原创 力扣974被K整除的子数组

由于可能是负数所以要进行修正:(sum%k+k)%k。

2023-08-19 19:24:43 228

原创 linux学习(文件描述符)[13]

所以fork的时候函数执行完毕,但是数据还在缓冲区中未刷新。所以会有父子两份数据在fork()之前ffush()(c语言的接口,刷新缓冲区)fflush(stdout),就不会有重复。

2023-08-19 18:00:33 100

原创 高并发内存池(centralcache)[2]

threadcache是每个线程独享,而centralcache是多线程共享,需要加锁(桶锁)一个桶一个锁解决外碎片问题:内碎片:申请大小超过实际大小;外碎片:空间碎片不连续,导致无法申请大块空间。

2023-08-18 20:33:05 256

原创 linux学习(文件描述符)[12]

重定向后,fork导致次数增多(缓冲区刷新策略)一切都被描述为struct file。一块内存空间:存够一定数据就会刷新。1.用户强制刷新(fflush)2.行刷新(行缓冲)遇到\n。从上往下找,匹配数字最小的。3.满刷新(全缓冲)

2023-08-18 17:18:27 101

原创 高并发内存池(threadcache)[1]

用FreeList做哈希桶的映射。

2023-08-17 21:57:09 95

原创 linux学习(文件描述符)[11]

是2,这是因为在Unix/Linux系统中,每个进程都有一个文件描述符表,其中前三个文件描述符分别是0、1和2。在Linux下,有一些与文件操作相关的宏可以用于处理文件描述符和文件权限。用代码创建的文件,默认路径在可执行文件同级目录下(本质是进程通过系统接口创建的)这些宏用于表示标准输入、标准输出和标准错误输出的文件描述符。返回的文件描述符可以用于后续的文件操作。设置了文件的权限,使得用户具有读和写的权限。返回值是实际写入的字节数。:打开一个文件,并返回一个文件描述符。参数一起使用,以设置文件的权限。

2023-08-17 19:24:20 228

原创 linux学习(进程替换)[10]

如果返回值为0,则表示是子进程,子进程中执行了自己的代码,并使用。执行成功,则子进程的代码会被替换为新的代码,否则会打印错误信息。需要替换为自己的可执行文件的路径。此外,还需要将自己的代码编译为可执行文件,并确保具有执行权限。在加载新程序进去之前,父子之间的的代码是共享的,数据写时拷贝进子进程。数组,其中包含要传递给子进程的环境变量。函数来运行自己的可执行文件,并将环境变量数组作为参数传递给它。替换为自己的可执行文件的路径,并根据需要修改环境变量数组。函数的最后一个参数是一个指向环境变量数组的指针。

2023-08-15 21:15:49 188

原创 linux学习(自写shell)[11]

strtok第一次调用传入原始字符串,第二次如果还要解析原始字符串则传入空。用来保存完整的命令行。加上颜色和部分连续命令。

2023-08-15 21:11:37 106

原创 linux学习(等待+进程替换初识)[9]

阻塞等待系统调用:在Linux中,许多系统调用函数可以使进程或线程进入阻塞等待状态,直到某个条件满足。非阻塞等待是指进程或线程在等待某个条件满足时,不会被暂停执行,而是继续执行其他任务。在Linux中,阻塞等待是指一个进程或线程被暂停执行,直到某个条件满足或事件发生。阻塞等待同步原语:除了系统调用外,Linux还提供了一些同步原语,用于实现线程之间的阻塞等待。这些同步原语可以帮助线程进行有效的互斥和同步,并实现线程之间的阻塞等待。当条件满足时,阻塞等待的系统调用会返回,并使进程或线程继续执行。

2023-08-15 15:51:01 54

原创 定长内存池设计ConcurrentMemoryPool

内存块自身进行链接,前四个字节存下一个的地址。

2023-08-14 22:35:03 177

原创 c++学习(多线程)[33]

本质封装操作系统的库事实证明,两个线程在cpu中交错运行thread传参为模板参数,应用折叠,都会变成左值,所以count还是0。

2023-08-13 12:01:21 806

原创 题34(在排序数组中查找元素的第一个和最后一个位置)

此题的关键在于找到左端点和右端点。右端点用第二种,避免死循环。

2023-08-12 20:15:51 223

原创 linux学习(进程管理)[8]

但是一般而言os无法提前知道哪些空间可能会被写入,即使拷贝也不知拷贝时间。子进程0,父进程1,失败-1。

2023-08-11 17:40:13 125

原创 linux学习(地址空间)[7]

在子进程中修改变量值,不会和父进程同步,但是地址空间相同(此地址不是物理内存的地址)(而是虚拟地址–线性地址)几乎所有的语言,如果有地址的概念,这个地址一定是虚拟地址,不是物理地址。

2023-08-11 16:34:41 94

原创 c++(空间配置器)[32]

迭代器提供了一种统一的访问容器元素的方式,可以通过迭代器遍历容器中的元素,实现对容器的操作。二级空间配置器使用了一些数据结构(如自由链表)来管理内存池,按照固定大小的块进行切分可以简化数据结构的设计和操作,从而提高内存分配的速度。空间配置器的碎片指的是内存中的小块未被使用的空间,这些空间可能散落在已分配的内存块之间,无法被有效利用。这个过程称为内存碎片的合并。需要注意的是,不同进程之间可以通过进程间通信的机制共享内存,但共享的内存通常是通过特殊的方式进行管理,而不是直接使用一个公用的空间配置器。

2023-08-09 15:16:27 838

原创 c++(IO流)[31]

要使自定义类型支持流插入和流提取操作,需要在类中重载相应的运算符。对于流插入操作,需要重载输出流运算符<<。该运算符接受一个输出流对象和一个自定义类型对象作为参数,并将自定义类型对象的数据输出到输出流中。

2023-08-08 11:13:54 87

原创 c++(类型转换+IO)[30]

在C++中,可以通过重载类型转换运算符(type conversion operator)来实现自定义类型到内置类型的转换。类型转换运算符是一种特殊的成员函数,用于将一个类类型转换为另一个类型。public :// 构造函数 MyInt(int v) : value(v) {} // 类型转换运算符 operator int() const {} };

2023-08-07 12:03:53 88

原创 c++学习(特殊类设计)[30]

如果你想要确保对象只能在堆上创建,可以通过将析构函数声明为私有,并提供一个静态成员函数来创建对象。这样,类的实例化只能通过调用静态成员函数来完成,而无法直接在栈上创建对象。如果你想要确保对象只能在栈上创建,可以将类的构造函数声明为私有,并提供一个静态成员函数来创建对象。这样,类的实例化只能通过调用静态成员函数来完成,而无法直接在堆上创建对象。懒汉模式在第一次调用获取实例的方法时才创建对象,而饿汉模式在类加载时就创建对象。这样,我们就可以确保对象只能在堆上创建,而无法在栈上创建。,我们可以在栈上创建对象。

2023-08-06 16:04:13 119

原创 c++学习(智能指针)[29]

它的基本思想是在对象的构造函数中获取资源,在对象的析构函数中释放资源,从而确保资源的正确获取和释放。在构造函数中,我们尝试打开指定的文件,如果打开失败,则抛出异常。RALL 的主要优点是可以避免资源泄漏和忘记释放资源的问题,提高代码的可靠性和可维护性。通过使用 RALL 技术,我们可以在对象的构造函数中获取资源,在析构函数中释放资源,从而避免了显式地调用获取和释放资源的函数,提高了代码的可靠性。其次,它的拷贝语义是通过所有权转移来实现的,即拷贝后原来的。,我们可以访问所管理的整数对象的值,并输出到控制台。

2023-08-04 12:50:04 60

原创 c++学习(异常)[28]

匹配优先调用链中最近的捕获

2023-08-04 11:06:56 71

原创 c++学习(lambda+bind)[27]

是 C++ 标准库中的一个函数模板,用于创建一个新的可调用对象,该对象将指定的函数或成员函数与一组参数绑定在一起。类型可以用来存储和调用各种类型的可调用对象,包括函数指针、函数对象、成员函数指针和 Lambda 表达式等。f1不能被f2赋值因为,f1和f2相当于不同的类,uuid不同,所以不能。类型来定义变量、参数和返回值,以存储和调用各种类型的可调用对象。下面这样是不允序的,因为a已经是传值补了,不能再定义传值补。绑定在一起,创建了一个新的可调用对象。绑定在一起,创建了一个新的可调用对象。

2023-08-03 15:53:19 84

原创 linux(进程)[6]

top命令:top命令用于实时显示系统中运行的进程和系统资源的使用情况。pidof命令:pidof命令用于根据进程名获取进程的PID。命令将显示所有包含 “myproc” 关键字的进程信息。Linux下执行一条命令就在系统层面创建了一个进程!这个结果会打印出两个“you can see me!ps axj | head -1 #显示头部。在top命令的输出中,可以查找特定进程的PID。启动一个软件就相当于启动了一个进程。pidof

2023-07-31 17:35:44 232

原创 c++(强生成关键字+可变参数模板+emplace)[26]

默认生成的成员函数会根据类的特性进行生成,例如默认构造函数会生成一个无参构造函数,拷贝构造函数会生成一个按值拷贝的构造函数。强制生成:如果你显式地声明了某个特殊成员函数,但是不提供其定义,编译器将不会生成该函数的默认实现。但是,如果构造函数是私有的,编译器将无法调用该构造函数,从而阻止了在栈上创建对象的方式。是C++标准库容器(如vector、list和deque)提供的一个成员函数,用于在容器的末尾直接构造对象,而不需要显式地调用构造函数。是C++11引入的关键字,用于对类的成员函数进行修饰和控制。

2023-07-31 12:20:48 95

原创 c++[左值+右值](25)

通过使用右值引用,可以避免不必要的拷贝构造和析构函数的调用,提高性能。移动赋值(Move Assignment)是C++11引入的一种特性,它允许对象之间的资源转移,而不是进行深拷贝。移动拷贝(Move Copy)是指在C++11中引入的一种特性,它允许通过移动语义来进行对象的拷贝操作。移动拷贝通常用于避免不必要的对象拷贝,提高性能。左值引用只能引用左值,不能引用右值,但是const左值引用既可以引用左值,又可以引用右值。)来实现的,这是C++11引入的一种特性,用于表示临时对象或可以被转移资源的对象。

2023-07-30 11:59:53 147

原创 linux学习(gbd进程)[5]

【代码】linux学习(gbd进程)[5]

2023-07-29 16:34:57 330

原创 c++学习(c++11)[24]

适用于需要频繁进行插入和删除操作的场景,尤其是在内存占用有限的情况下。因此,我们只能在特定位置之后插入新元素,这在某些场景下可能需要额外的操作来确定插入的位置。是一个单向链表容器,插入操作涉及到修改指针和节点的链接关系,而不仅仅是简单的在容器中插入一个元素。是一个单向链表容器,每个节点只包含一个指向下一个节点的指针,没有指向前一个节点的指针。容器,通常需要手动进行插入操作,而不是依赖于IDE或编辑器提供的右键引入参数插入功能。容器的特性决定了其插入操作的复杂性,无法简单地通过右键点击来自动插入参数。

2023-07-29 13:24:54 103

原创 c++学习(布隆过滤器)[23]

在使用布隆过滤器时,需要根据实际情况选择合适的位图长度和哈希函数个数,以平衡空间占用和误判率。布隆过滤器的优点是占用空间小、插入和查询速度快,且不需要存储实际的元素值。但布隆过滤器也存在一定的误判率(False Positive),即可能将不存在的元素误判为存在。查询元素:对于要查询的元素,同样使用k个哈希函数对其进行哈希计算,得到k个哈希值。然后检查位图中对应的位置,如果所有位置都为1,则认为元素可能存在于集合中;插入元素:对于要插入的元素,使用k个哈希函数对其进行哈希计算,得到k个哈希值。

2023-07-29 11:20:41 214

原创 c++学习(位图)[22]

位图的主要优点是占用空间小、操作效率高,适用于处理大规模数据和需要高效判断元素是否存在的场景。它使用一个二进制位来表示一个布尔值,其中每个位的值表示对应位置的元素是否存在或满足某种条件。它使用多个哈希函数和位图来表示集合中的元素,可以高效地进行元素的判断。压缩算法:位图可以用于对大规模数据进行压缩,将数据转换为位图表示,从而减少存储空间的占用。位运算:位图可以进行位运算,如与、或、异或等操作,用于实现一些高效的算法和数据结构。去重:可以使用位图来判断某个元素是否已经存在,从而实现去重的功能。

2023-07-28 19:54:07 128

原创 c++学习(哈希)[21]

开放地址法(Open Addressing)是一种解决哈希冲突的方法,在发生冲突时,通过一定的规则找到下一个可用的空桶来存储冲突的键值对。闭散列,也称为封闭寻址法(Closed Addressing),是指当发生哈希冲突时,将冲突的键值对存储在哈希表的同一个桶中,通常使用链表或其他数据结构来存储冲突的元素。哈希表的存储方式通常是通过数组来实现的,这个数组通常被称为哈希表或哈希桶。再哈希法(Rehashing):当发生哈希冲突时,使用另一个哈希函数计算出一个新的哈希值,然后将冲突的键值对存储在新的位置上。

2023-07-28 19:39:19 256

原创 c++学习(红黑树)[20]

总的来说,红黑树在平衡性和性能之间取得了一种平衡,适用于需要高效的插入和删除操作的场景。红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在插入和删除节点时通过一系列的旋转和重新着色操作来保持树的平衡。红黑树的平衡性质使得它在插入、删除和查找等操作上具有较好的性能。在红黑树中,当插入一个节点时,需要通过一系列的旋转和重新着色操作来保持树的平衡。通过上述变色规则,红黑树保持了平衡性质,并且确保了树的黑色节点数量相等,从而保证了红黑树的平衡性。

2023-07-22 13:28:16 36

原创 c++学习(avl树)[19]

左旋是将一个节点的右子树变为其父节点,右子树的左子树变为该节点的右子树。右旋是将一个节点的左子树变为其父节点,左子树的右子树变为该节点的左子树。由于AVL树是自平衡的,可以保证树的高度始终保持在O(log n)的范围内,因此插入、删除和查找操作的时间复杂度都是O(log n)。AVL树是一种自平衡的二叉搜索树,它在插入和删除操作后会通过旋转操作来保持树的平衡。AVL树的平衡是通过节点的高度来衡量的,平衡因子是左子树的高度减去右子树的高度。总结:AVL树是一种自平衡的二叉搜索树,通过旋转操作来保持树的平衡。

2023-07-21 14:09:40 33

原创 c++学习(map[])[18]

【代码】c++学习(map[])[18]

2023-07-20 15:00:05 31

原创 c++学习(set+map)[17]

它基于红黑树(Red-Black Tree)实现,提供了高效的插入、删除和查找操作。它基于红黑树(Red-Black Tree)实现,提供了高效的插入、删除和查找操作。迭代器提供了一种通用的方式来访问容器中的元素,可以通过递增迭代器来遍历容器中的元素,并使用。提供了一系列成员函数来操作和访问容器中的键值对,包括插入、删除、查找、遍历等操作。提供了一系列成员函数来操作和访问容器中的元素,包括插入、删除、查找、遍历等操作。提供了方便的操作接口,适用于需要维护有序且唯一元素集合的场景。根据元素的唯一性和有序性,

2023-07-19 19:03:05 34

原创 linux学习(gcc+makefile)[4]

它可以根据文件的依赖关系和规则来自动执行编译、链接和其他操作,以生成目标文件或可执行文件。Makefile中的规则可以包含多个目标和依赖,每个目标和依赖都可以是文件名或者其他规则。Makefile的用法非常灵活,可以根据具体项目的需求定义适合的规则和变量。其中,target是目标文件,prerequisites是目标所依赖的文件或操作,command是生成目标的具体操作步骤。除了规则和变量,Makefile还支持一些特殊的目标,如clean目标用于清理生成的文件,all目标用于构建整个项目等。

2023-07-18 20:58:26 29

原创 linux学习(umask+粘滞位+vim)[3]

当权限为"t"时,表示粘滞位被设置且可执行,当权限为"T"时,表示粘滞位被设置但不可执行。当粘滞位被设置在一个目录上时,只有目录的所有者、文件的所有者和超级用户才能够删除或重命名该目录下的文件。则表示将默认权限掩码设置为022,即新创建的文件权限为644(rw-r–r–),新创建的目录权限为755(rwxr-xr-x)。umask命令和umask函数的作用都是一样的,用于设置文件和目录的默认权限掩码,以控制文件和目录的默认权限。需要注意的是,只有目录的所有者、文件的所有者和超级用户才能够设置或移除粘滞位。

2023-07-16 22:43:51 44

原创 c++学习(二叉树搜索)[16]

1.什么是多态多态是面向对象编程中的一个重要概念,指的是同一个方法在不同对象上具有不同的行为。简单来说,多态是指一个对象能够根据当前所处的具体类型,来决定调用哪个类的方法。多态可以通过继承和函数重写来实现。当一个子类继承自父类,并重写了父类的方法时,可以通过父类的引用或指针来调用子类的方法。在编译时,编译器会根据引用或指针的静态类型来确定调用哪个类的方法,而在运行时,实际调用的是对象的动态类型所对应的方法。多态的好处是增加了代码的灵活性和可扩展性。

2023-07-16 14:24:06 30

在看vector课时懒得做的笔记的记录

自用

2023-07-08

飞思卡尔电磁组Kalman滤波源代码

飞思卡尔 电磁组 Kalman 滤波 源代码,卡尔曼滤波 互补滤波

2021-05-20

MCU用户手册_TC264B_um_v1.3.pdf

tc264

2021-05-20

循迹小车电路图.pdf

循迹小车电路

2021-05-20

自控行业的PID算法分类详解.pdf

pid描述分类

2021-05-20

智能车电磁检测及控制算法的研究.pdf

电磁检测

2021-05-20

边缘检测的简化想法.pdf

边缘检测

2021-05-20

【原理图】主板原理图.7z

TC264主板原理图

2021-02-25

【软件】上位机 串口助手等.7z

TC264

2021-02-25

【例程】各个模块的使用例程.7z

TC264

2021-02-25

TC264_Library.zip

TC264库

2021-02-25

TC264智能车核心板资料包V10R2_20200405.zip

TC264智能车核心板资料包

2021-02-25

TC264主板资料.zip

TC264主板资料,智能车比赛

2021-02-25

空空如也

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

TA关注的人

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