自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Ringbuffer class要注意的点,其实这个类似于vector

类中通过using定义了一系列依赖T的类型别名(前文提到的value_typereference等),这些别名本质是对模板参数T的「包装」,例如// 元素类型 = T// 元素的引用 = T&// 元素的常量引用 = const T&作用:当T变化时(如从int改为),所有依赖T的类型会自动同步,无需修改函数参数 / 返回值的硬编码(如T&改为示例push函数接受参数,当T为int时等价于const int&;当T为时自动变为,实现了「一次编写,适配多类型」。

2025-08-02 02:21:37 591

原创 C++中的alloc与容器之间的关系

内存池优化:通过自定义分配器减少频繁的内存分配和释放开销。特殊内存区域:将容器数据分配到共享内存或特定硬件内存中。调试与统计:跟踪内存分配情况,检测内存泄漏。Allocator和std::allocator_traits在 C++ 中,内存分配器是一个抽象的概念,用于管理动态内存的分配和释放。标准库中的容器(如 std::vector)允许用户传入自定义分配器,以支持不同的内存管理策略(例如池分配、共享内存分配等)。接口不统一。

2025-08-02 01:30:44 535

原创 Ringbuffer

RingBuffer 是一个基于实现的,通过模运算模拟环形结构,支持高效的增、删、改、查操作。以下详细讲解其内部实现,重点聚焦于操作,以及如何管理循环特性。

2025-08-02 01:11:00 483

原创 constexpr —— 编译期常量构造函数

构造函数允许在编译时构造对象。类的成员变量必须全部是字面量类型(如基本类型、数组、其他。是 C++11 引入的关键字,用于表示表达式、函数或对象可以在编译时求值。函数可以在编译时或运行时调用。如果所有参数是编译期常量,函数将在编译时求值。变量必须在编译时确定其值,通常用于定义编译期常量。,可以将计算从运行时转移到编译时,提升程序性能。,可以在编译期完成更多计算,减少运行时开销。并非所有函数都能声明为。

2025-07-31 01:25:34 112

原创 C++ 的名字查找规则(Name Lookup Rules)

理解这些规则有助于避免常见的命名冲突和未定义标识符错误。当标识符包含作用域解析运算符。

2025-07-29 23:17:08 295

原创 常见的 模板T 类型隐式约束类型

【代码】常见的 模板T 类型隐式约束类型。

2025-07-29 22:43:16 189

原创 讨论下函数的地址,且程序运行时地址会不会改

故调用的时候不用担心调不到函数,反而要担心里面的变量会不会已经失效,从而引发coredump

2025-07-28 23:51:30 146

原创 CallbackManager

作用: 主要用于处理异步操作的回调机制,特别是在需要跨组件或跨线程通信的场景中。

2025-07-28 00:45:48 204

原创 ObserverManager

1.内存管理:优先使用智能指针,避免手动管理内存。这里注意一定要使weak_ptr去表示观察者,否则调用观察者的代码的时候可能会出现双重引用的问题。使用vector: 末尾push即可,通知遍历,vector连续存储,内存友好,移除开销大些,但是基本上不多.而且移除的时候基本上也要遍历.3.删除观察者,这个完成了要被查找的元素的删除和无效的观察者的删除(通过remove_if)2.线程安全:在多线程场景中保护观察者列表和通知过程。4.获取所有的观察者(失效的删除)1.选定观察者的数据结构。

2025-07-27 03:34:38 687

原创 Makefile中的一些知识点

在 Makefile 中,变量的赋值可以来源于多种地方。是 GNU Make 中的一个关键字,用来。然后bash执行make的时候传参的时候。通常情况下:Makefile中设置。Makefile 内部定义。命令行传入(优先级更高)那么 Make 会使用。

2025-06-05 15:28:56 206

原创 RFC862 EchoServer

Echo 协议是一种简单的网络协议,设计目的是让客户端向服务器发送数据,服务器将接收到的数据原封不动地返回(回显)给客户端。

2025-05-11 22:31:12 220

原创 ATCHANNEL.c介绍

的主要职责是:通过串口(如)与 modem 进行 AT 命令通信。维护一个读线程负责接收并处理 modem 返回的数据。提供线程安全的接口供上层发送命令并同步等待响应。解析返回结果,包括OKERROR/ 中间响应等。| ATChannel API | ← at_send_command() 等接口| 命令同步机制 + 线程锁 | ← pthread_mutex, condition。

2025-04-30 17:52:25 726

原创 Muduo Logger

往文件写日志的一个常见问题是,万一程序崩溃,那么最后若干条日志往往就丢失了,因为日志库不能每条消息都flush硬盘,更不能每条日志都open/close文件,这样性能开销太大。殊不知如果出现程序死循环拼命写日志的异常情况,那么往往是开头的几条日志最关键,它往往反映了引发异常(busy-loop)的原因(例如收到某条非法消息),后面都是无用的垃圾日志。4. 日志消息的格式是固定的不需要运行时配置,这样可节省每条日志解析格式字符串的开销,好处:使用固定格式的日志,使用脚本好提取,好处理,格式变了,就比较麻烦。

2025-03-09 01:23:13 956

原创 多缓冲技术

这种技术通常用于计算机显示图像,也常用来避免在读写设备不同的情况下使用双端口RAM(DPRAM)。在计算机科学中,多重缓冲是一种使用多个缓冲区来存储数据块的技术,目的是使“读取者”看到的。尽管可能是旧的)数据版本,而不是正在被“写入者”更新中的。

2025-03-08 23:43:32 193

原创 vector的emplace_back和push_back

2. 在a不存在的情况下,使用emplace_back最佳,push_back 的move次之,push_back的最差。“在已经存在对象的情况下,push_back 和 emplace_back其实都只有一次调用构造,不过构造函数不同。1. 在a已经存在的情况下,使用push_back的move最佳,其他emplace和push都差不多。对于拷贝构造和move构造, 拷贝可能涉及到深浅拷贝,move直接搞指针,所以快。push_back(std::move(a)):调用一次移动构造。

2025-02-28 15:32:28 201

原创 C++中的模板的一些约定熟成(不看后悔一辈子)

Predicate:强调条件判断,返回 bool,用于筛选或测试。Compare:强调顺序比较,返回 bool,用于排序或优先级。Operation:强调计算或变换,返回任意类型,用于处理数据。Function:最通用,表示任何可调用对象,不限类型或用途。命名惯例典型含义示例场景Predicate返回布尔值的条件检查Compare定义顺序的二元比较Operation执行变换或计算Function通用可调用对象Iterator迭代器类型T通用类型参数。

2025-02-28 01:12:11 948

原创 模板实例化

模板只是蓝图,是一种编译器用来生成具体代码的机制,会在编译期会实例化的,之后才可以用实例化特点。

2025-02-28 00:41:06 280

原创 Linux的Pthreads mutex采用futex(2)实现

(Fast Userspace Mutex)是一种 Linux。,但具体的实现取决于 glibc 版本和互斥锁的类型。如果你有更具体的问题,可以继续问我!如果线程持锁时间较短(比如自旋锁。中有不同类型,影响是否使用。,Linux 还使用。

2025-02-10 23:21:23 559

原创 GCC 头文件的搜索顺序

目录作用来源系统级头文件系统软件包GCC 运行时库和内部文件GCC本地安装的软件头文件手动安装的软件手动指定的-I路径(如这样可以保证本地安装的库优先于系统库,但不会影响 GCC 自己的库。当您使用它gcc xxx.c来编译程序时,GCC会自动为您包含一些默认的-I(包含路径)和(库路径)-L1. GCC 默认的-I路径当你不手动指定-IGCC默认会搜索GCC 自己的头文件,比如stdarg.h手动安装的软件的头文件目标架构相关的系统头文件标准库头文件,比如stdio.h。

2025-02-01 23:48:06 545

原创 I/O multiplexing LT and ET

可惜的是,目前内核中使用同一种数据结构表示读和写事件,读写事件放在一个就绪列表中,在读出后才判断是读事件还是写事件。因此,我们无法实现在不同的场景使用不同的模式。值得注意的是,许多第三方网络库都使用的是LT模式,一般来说为了互相的兼容推荐使用LT模式。如果有事件到达,还没有进行处理,则它会一直通知,直到事件被处理。LT模式 更适用于read()事件,它不会造成接收的饥饿,ET模式可能会造成数据接收不完整的情况。,即使你没有处理这个事件,它也会持续触发。,否则可能会丢失连接。

2025-01-31 15:46:08 579

原创 WeakCallback

测试类具体分解。

2024-04-11 17:05:06 214

原创 c# getUppercase

需要注意的是,GetUpperBound 方法返回的是最大索引值,而不是数组的长度。在这个示例中,`array` 是一个 3x3 的二维数组,`maxIndex0` 和 `maxIndex1` 分别是第一维和第二维中最大元素的索引。在这个例子中,`array` 是一个 3 行 4 列的二维数组,`maxRowIndex` 的值为 2,因为行的索引范围是 0 到 2。在这个例子中,`array` 是一个 3 行 4 列的二维数组,`minRowIndex` 的值为 0,因为行的索引范围是 0 到 2。

2023-03-31 18:02:30 250

原创 MP的笔记

mybatisPlus初始使用

2023-03-13 14:26:14 61

空空如也

空空如也

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

TA关注的人

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