- 博客(168)
- 资源 (2)
- 问答 (2)
- 收藏
- 关注
原创 Intel RDT CAT
RDT,全称为Resource Director Technology,翻译为资源导向技术或资源分配技术。是英特尔提出的一系列硬件特性,用于增强对共享资源的监控和分配。因此,RDT特指英特尔的技术,并不是跨厂商的标准。该技术旨在通过一系列的CPU指令从而允许用户直接对每个CPU核心的L2缓存、L3缓存(Last Level Cache, LLC)以及内存带宽进行监控和分配。缓存检测技术允许软件查询特定的应用程序或虚拟机在共享最后一级缓存(LLC)中的占用情况。缓存分配技术。
2025-03-10 17:07:37
662
原创 UDP多对多组播通信
广播和多播仅应用于UDP。TCP是一个面向连接的协议,TCP一定是点对点的,一点是两个主机来建立连接的,TCP肯定是单播。只有UDP才会使用广播和组播。如下示例实现一个UDP多对多的组播通信,进程中有收、发两个线程,分别表示往组播发送、接收数据。使用任意节点发送消息,其它的节点都能收到。
2024-05-15 14:48:28
409
1
原创 valgrind使用
Valgrind是一个工具集,包含了许多调试与性能分析的工具。其中使用最多的是Memcheck,它能帮你检测C/C++中的内存问题,避免程序崩溃或不可预知错误。Cachegrind一个缓存和分支预测分析器。它能够模拟CPU中的一级缓存L1、D1和二级缓存,且能够精确指出程序中cache的命中和丢失。它还可以给出每行代码,每个函数,每个模块,和整个程序的内存引用次数以及指令数,有利于优化程序。Callgrind相当于Cachegrind的一个扩展。
2024-01-24 16:19:31
1122
原创 红黑树的删除
好了,到这红黑树的删除总算讲完了,不知道你有没有睡着。重点是,红黑树的删除 = 删除 + 维护,无论怎样删除结点,都会动态的调整树高。
2023-12-29 17:02:50
1029
原创 红黑树的插入
当你熟悉了上面五种场景后,无论红黑树已经有多大,无论新节点从哪个位置插入,都能按合适的方式调整整个树的高度,就才是插入算法的精妙所在!
2023-12-26 10:40:46
1106
原创 红黑树的旋转、变色
旋转是以一个父节点作为参照物的。旋转分为左旋转与右旋转,其对应的结果就是将左子节点(后称左节点)或右子节点(后称右节点)替换原来的父节点,具体操作如下。右旋转使左节点成为新的父节点。原来的父节点,成为新的右节点。先前左节点的右子树,变成新右节点的左子树。左旋转使右节点成为新的父节点。原来的父节点,成为新的左节点。先前右节点的左子树,变成新左节点的右子树。
2023-12-25 10:54:08
450
原创 哈希表、哈希冲突解决办法
我们知道,普通数组能够直接寻址,在O(1)时间内能访问到数组中的任意位置。它需要足够大的空间,为每一个关键字保留一个位置。当关键字取值的范围很大,储存空间又有限时,能不能同样用数组的形式实现O(1)查找?哈希表(Hash Table)就是这样的数据结构,当实际储存的关键字集合,比所有可能的关键字的全集小许多时,使用一个长度有限的数组去储存这些关键字,从而节省大量的空闲空间。它也被称作为散列表,因为它的键是分散存储在数组中的。如图,黄色区域为键的全集,范围为0~99,绿色区域为实际存储的键。
2023-11-27 13:09:31
1295
原创 多路复用IO:select、poll、epoll
多路IO复用是指单个进程/线程就可以同时处理多个IO请求。用户将想要监视的文件描述符添加到selectpollepoll函数中,由内核监视,函数阻塞。一旦有文件描述符就绪(读就绪或写就绪),或者超时(设置了超时时间),函数就会返回,然后该进程可以进行相应的读/写操作。
2023-11-13 10:53:56
255
原创 Linux 命令(11)—— tcpdump
tcpdump是一个网络抓包工具,它可以捕获和分析TCP/IP网络协议的数据包。它使用libpcap库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。之所以叫做tcpdump,是因为它最初是用于捕获和分析TCP协议的数据包。然而,随着时间的推移,它的功能扩展到了其他协议,如UDPICMP等。尽管如此,它的名称仍然保持为tcpdump。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
2023-10-26 14:29:12
1245
原创 Linux 命令(10)—— ps
UNIX风格的选项:必须以开头,多个选项可以组合在一起使用。例如,ps -auxps -ef。BSD风格的选项:不能以开头,多个选项可以组合在一起使用。例如,ps auxps ef。GNU风格的长选项:必须以--ps --info。ps -aux与ps aux会产生不同的结果。
2023-08-03 10:00:25
348
原创 如何避免GCC优化选项对程序带来的干扰?
关于具体每个编译选项的解释,牵扯到太多的背景知识。可以通过man文档查找说明。的汇编代码,精简了许多操作,而这些细微的差异如果不注意,会违背开发者的初衷,甚至影响程序预期结果。也就是说,程序没有按原有的逻辑去执行循环累加,而直接返回了计算结果。发现main函数汇编代码的第二行,是将立即数0x1356(十进制:4950)移入。开启的编译选项,默认。
2023-08-02 15:54:11
389
原创 实际用户ID、有效用户ID、保存的设置用户ID
与进程相关的id简介查看方式如何设置实际用户ID (Real User ID, RUID)进程被创建时的用户ID一般不可更改实际组ID (Real Group ID, RGID)进程被创建时的组ID一般不可更改有效用户ID (Effective User ID, EUID)进程访问文件或其他资源时使用的用户ID有效组ID (Effective Group ID, EGID)进程访问文件或其他资源时使用的组ID。
2023-07-22 14:38:32
1214
原创 Google Test(gtest)新手入门
gtest),也称为Google C++ Testing Framework,是一个由Google开发的开源C++测试框架,提供了多种工具来支持C++代码的单元测试。提供了多种断言方法,可以用于测试函数、代码片段的预期行为。支持自动化测试,可以方便编写测试用例,并自动运行和输出结果。支持死亡测试(Death Test),测试代码在极端或异常条件下的行为表现。提供测试夹具(Test Fixture,一种用于编写可重复执行的测试用例的机制),使得测试用例便于重用。
2023-07-20 17:00:10
2902
原创 使用PAPI进行性能测试
PAPI(Performance Application Programming Interface)是一个跨平台的性能计数接口工具集。它提供了一套标准化的API,用于访问硬件性能监测计数器(PMU),在软件中实现高精度的性能分析与优化。PAPI性能测试工具的安装、使用及实例 - Satchmo丶 - 博客园 (cnblogs.com)
2023-06-28 13:59:24
894
原创 Linux Perf
perf (Performance analysis tools for Linux),是Linux官方的性能分析器(profiling),存在于内核源码目录tools/perf中。可以用于分析系统调用、硬件事件、软件事件、CPU使用情况、内存使用情况、锁等信息,从而帮助定位系统性能问题。perf原名为Linux性能计数器(Performance Counters for Linux,PCL),现名为Linux性能事件(Linux Performance Events,LPE)。
2023-06-25 16:54:01
1759
原创 Linux 命令(9)—— top
top提供运行系统的动态实时视图。它可以显示系统摘要信息以及当前由Linux内核管理的任务列表。所显示的系统摘要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的,并且可以在重新启动期间使配置持久。
2023-06-16 15:10:36
4004
原创 解释器模式(Interpreter)
定义一个语言的文法,并且建立一个解释器来解释该语言中的句子。解释器模式是一种类行为型模式。就比如正则表达式,它就是解释器模型的一种应用,解释器为正则表达式定义了一个文法,如何表示一个特定的正则表达式,以及如何解释这个正则表达式。
2022-12-27 11:20:03
560
原创 访问者模式(Visitor)
在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。访问者模式定义:表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。假如你需要将数据对象存储到xml文件中,而这样的数据类型有很多种。你不可能为每个类添加一个存储为xml的方法,因为后续可能又需要将数据存储其它格式,比如json,csv等。
2022-12-15 23:45:36
477
原创 模板方法模式(Template Method)
模板方法模式定义:是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。如在构建造房屋时,有一些基本的步骤,例如打地基、 建造框架、 建造墙壁和安装水电管线等。标准房屋建造方案中可提供几个扩展点,允许潜在房屋业主调整成品房屋的部分细节。使得成品房屋会略有不同。
2022-12-15 20:58:46
446
原创 策略模式(State)
完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。策略模式定义:策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,让它们可以相互替换。假如你需要前往机场。你可以选择乘坐公共汽车、预约出租车或骑自行车。这些就是你的出行策略。你可以根据预算或时间等因素来选择其中一种策略。
2022-12-15 11:04:34
525
原创 观察者模式(Observer)
建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。观察者模式:定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
2022-12-08 22:56:22
343
原创 备忘录模式(Memento)
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
2022-12-06 22:40:34
350
原创 中介者模式(Mediator)
对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式,这就是中介者模式的模式动机。
2022-12-05 23:56:22
560
原创 命令模式(command)
在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机。
2022-11-02 07:29:25
370
GDB调试程序-入门级
2019-02-26
vscode怎样包含boost库?
2022-04-12
求正则表达式:匹配不包含"E2564"、"E2462"的字符串
2020-12-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人