C++
文章平均质量分 83
C++
橘色的喵
需要联系发邮件: stallion5632@163.com
展开
-
C++编程:实现一个基于原始指针的环形缓冲区(RingBuffer)缓存串口数据
本文将介绍一个解析串口数据的环形缓冲区,使用'$'或者'#'分割串口消息。选用内存块数组,而不是选用一整块的内存+读写指针的方式,以减少读写数据时的资源竞争。原创 2024-10-17 10:03:10 · 525 阅读 · 0 评论 -
C++编程: 利用 pcap 库和 select 函数实现网络数据包实时捕获
在网络编程中,实时捕获网络数据包是一项常见的任务。这对于网络安全分析、网络流量监控以及网络性能调优等领域都非常重要。在本篇博客中,我们将介绍如何利用 pcap 库和 select 函数实现网络数据包的实时捕获,以及一些相关的技巧和应用场景。原创 2024-05-05 19:48:31 · 325 阅读 · 0 评论 -
QNX 平台下 mmap 缓存与非缓存模式的 memcpy 性能分析
在嵌入式系统中,数据处理效率对系统性能至关重要。在 QNX 系统中,通过 `mmap` 函数将文件映射到内存后,可以选择启用或禁用缓存(Cache)。本文将对比在缓存(Cache)和非缓存(NoCache)情况下,使用 `memcpy` 和汇编版本 `asm_memcpy` 的数据传输速度,帮助开发者优化系统性能。原创 2024-05-05 22:29:29 · 1227 阅读 · 0 评论 -
理解 C++ 中的 “placement new“ 和 `reinterpret_cast`
在 C++ 编程中,我们经常会遇到需要进行低级内存操作的情况。在这种情况下,了解和正确使用工具变得至关重要,以确保我们的代码既高效又安全。本文将深入探讨两个在 C++ 中经常用于低级内存操作的工具:“placement new” 和。“placement new” 和是两个在 C++ 中用于低级内存操作的重要工具。“placement new” 用于在已分配的内存中构造对象,允许我们精确控制对象的构造位置和参数。原创 2024-05-05 16:51:52 · 394 阅读 · 1 评论 -
查找C++中所有代码行数超过100的类成员函数
查找C++中所有代码行数超过100的类成员函数原创 2024-03-11 20:33:05 · 459 阅读 · 0 评论 -
实现动态横切:使用C++实现AOP
C++ 动态横切是通过切入点和连接点在一个方面中创建行为的过程,连接点可以在执行时横向地应用于现有对象。动态横切通常用于帮助向对象层次中的各种方法添加日志记录或身份认证。在很多应用场景中,动态横切技术基本上代表了AOP。...原创 2022-07-12 22:51:01 · 659 阅读 · 0 评论 -
C++的Linux程序在崩溃(coredump)后,打印调用堆栈的方法,支持x86和ARM
Linux程序如果使用-g编译,若程序发生崩溃(coredump),是可以使用gdb调试生成的dump文件,找到崩溃的位置的。然后C++有一些组件是提供崩溃堆栈打印的,本文给出boost::stacktrace和Backward-cpp打印方法。.........原创 2022-07-25 09:42:27 · 7523 阅读 · 0 评论 -
C++基于opencv4的视频质量检测
基于opencv4实现的视频质量诊断, 视频质量诊断----亮度异常检测 视频质量诊断----色度异常检测 视频质量诊断----雪花噪声检测 视频质量诊断----条纹噪声检测 视频质量诊断----模糊检测 视频质量诊断----信号丢失检测 视频质量诊断----遮挡检测 视频质量诊断----画面冻结检测 视频质量诊断----PTZ云台运动检测 视频质量诊断----画面抖动检测...原创 2022-07-15 12:56:36 · 5579 阅读 · 10 评论 -
使用C++的模板和std::any实现增删改查业务代码复用
本文介绍如何利用C++的模板和`std::any`类型设计一个通用的对象管理器,以处理不同类型对象的增删改查操作。原创 2022-07-16 21:51:18 · 337 阅读 · 0 评论 -
C++一个支持Sqlite3和MySQL的数据库封装,支持跨平台(Window和Linux)
DatabaseLayer 是一个支持 SQLite3 和 MySQL 的数据库封装工具,同时支持跨平台(Windows 和 Linux)。该工具的设计灵感来源于 CppSQLite 和 POCO 中的数据库实现。原创 2022-07-16 13:59:00 · 1384 阅读 · 0 评论 -
如何将C++代码封装成C模块,适配Python、Lua和C++调用。多种语言(C++、python和lua)调用C++封装的看门狗sdk模块
如何将C++代码封装成C模块,适配Python、Lua和C++调用。多种语言(C++、python和lua)调用C++封装的看门狗sdk模块原创 2022-07-05 22:17:21 · 831 阅读 · 0 评论 -
优化CUDA内存管理:基于NVIDIA Jetson的内存池封装
+ 在基于NVIDIA jetson多线程编程的过程中,发现经常出现申请CUDA存在失败的情况,原因是在业务逻辑中存在经常执行cudaMallocHost和cudaFreeHost的操作,可能是jetson系列的内存管理不是那么好;+ 而我们项目的业务实际很强CUDA内存块的只有固定的若干种;+ 基于上面原因设计 哈希表负责CUDA内存事情和释放。+ 内存池应具备自动扩容和自动缩容的功能;自动扩容好理解,而自动缩容是的是当内存链表中............原创 2022-07-07 23:59:51 · 721 阅读 · 0 评论 -
C++的阻塞式消息总线message_bus实现
本实现参考自一个通用的C++ 消息总线框架。该消息总线主要解决多个模块间的耦合问题,是阻塞式的。通信对象向消息总线发布一个主题,包含消息主题和消息处理函数。消息主题标示特定主题,消息处理函数用来响应该主题的某种消息类型。通信对象向消息总线发送特定主题和消息参数,总线根据消息主题和消息参数找到对应的消息处理函数来处理请求。lua简单消息总线实现,类似于C++ Qt的信号槽python简单消息总线实现,类似于C++ Qt的信号槽。原创 2022-08-01 11:34:44 · 1122 阅读 · 1 评论 -
C++多进程master-worker工作机制较完整的实现,边端和云端协同工作实现
1、 master进程(master_app) :worker进程的守护进程,监控和管理引擎,提供worker进程策略下发、收集worker进程数据上报 2、worker进程(worker_app): 取流解码、分析推理进程 |3、轨迹视频叠加服务(draw-track-server) ,基于openresty开发的,在视频上画轨迹的服务。............原创 2022-07-23 13:43:32 · 1884 阅读 · 0 评论 -
C++ 基于boost.asio封装的日志库,支持输出到文件、控制台和syslog远程日志,支持变长参数的日志输出
C++ 基于boost.asio封装的日志库,支持输出到文件、控制台和syslog远程日志,支持变长参数的日志输出原创 2022-07-01 02:24:20 · 695 阅读 · 0 评论 -
C++编写的局域网tcp license认证服务
C++编写的局域网tcp license认证服务,一个tcp服务多个tcp客户端,支持多语言Python和lua(适应cffi调用)原创 2022-06-30 08:12:22 · 891 阅读 · 0 评论 -
C++实测多线程性能测试:ConcurrentQueue(无锁队列)、std::atomic_flag 和std:: mutex
本测试比较了无锁队列和std::mutex在多线程环境下的表现。结论对于使用 std::mutex 的 std::list 或 std::deque,如果 Item 结构体较小,推荐使用 std::atomic_flag 代替 std::mutex。如果 Item 结构体较大,继续使用 std::mutex。新的业务代码可以酌情使用无锁队列 ConcurrentQueue。原创 2022-07-01 03:24:36 · 1258 阅读 · 0 评论 -
C++基于共享内存的守护进程心跳监控
依赖boost,守护进程启动目标进程,并基于共享内存给目标进程增加心跳检测功能。原创 2022-06-30 08:17:33 · 406 阅读 · 0 评论 -
C++基于boost实现 获取文件或者字符串md5
C++基于boost实现 获取文件或者字符串md5c++11boost 1.66版本以上原创 2022-07-01 03:47:51 · 1263 阅读 · 0 评论 -
二进制序列化与反序列化:支持C++基础类与STL容器
基于二进制的序列化与反序列化,支持C++基础类类型及stl容器类型。支持: 1、可平凡复制类型 (C++ POD概念,支持按位复制的类型) 2、std::string。 3、容器类型 4、std::pair类型理 5、std::tuple 元组...原创 2022-06-30 08:16:47 · 707 阅读 · 0 评论 -
C++ 模型加密与解密方法
通过 DES 对称加密算法对模型数据进行加密保护,并提供了简单的接口函数 `encrypt_model` 和 `decrypt_model` 进行加解密操作。使用固定的密钥 "helloworld" 对数据进行加解密,适用于需要基本保护模型数据的应用场景。原创 2022-07-01 03:10:06 · 311 阅读 · 0 评论 -
在 Ubuntu 上使用 GDB 调试QNX AARCH64 架构程序
GDB 是功能强大的调试工具,掌握 GDB 调试技巧可以显著提高开发效率。本文介绍了在 Ubuntu 上使用 GDB 调试 AARCH64 架构原创 2023-12-03 14:27:05 · 949 阅读 · 0 评论 -
优化C++程序性能:右值引用与std::move的正确使用
在C++11标准中引入的右值引用和std::move函数为我们提供了一种有效的方式来避免不必要的对象拷贝,从而优化程序的性能。本文将探讨如何正确使用右值引用和std::move,以及在汇编层面对比使用与不使用这些特性的差异,并深入思考它们在实际开发中的应用场景。原创 2023-02-22 08:06:13 · 627 阅读 · 0 评论 -
日志打印传值 传引用 右值引用性能测试(Linux/QNX)
Linux平台和qnx平台优化后传值性能都是比传引用的差,也比传右值的差,因此传参时有必要传递引用。编译: g++ -o test test.cpp -std=c++11 -O2。原创 2024-05-08 13:59:41 · 281 阅读 · 0 评论 -
vector、heap数组、stack数组访问性能验证
在软件开发中,优化代码性能是一项重要的任务。了解不同数据结构和访问方法的性能差异对于做出正确的选择至关重要。本文将通过测试不同数据结构和访问方法的性能来探讨这一问题,并给出相应的指导意见。原创 2024-05-08 15:00:42 · 181 阅读 · 0 评论 -
使用C++ __builtin_expect优化程序性能后,程序体积不改变原因
使用__builtin_expect优化程序性能,开启-O3的情况下,确实程序的体积可能不改变,但是还是会产生优化效果。在Compiler Explorer 选择ARM64 gcc9.5 -O3优化。发现使用使用__builtin_expect前后程序的大小是完全一样的。在ubuntu 20.04下使用 g++ -O3测试。不使用__builtin_expect。使用__builtin_expect。上图中主要汇编指令的顺序不一致。原创 2024-05-08 14:28:33 · 397 阅读 · 0 评论 -
dummy_worker C++ 预占用部分比例cpu资源,人为创造cpu资源紧张
有时候为了C++测试程序在cpu资源紧张情况下是否正常,需要人为创造cpu资源紧张。占用4个cpu核的20%比例的cpu资源。原创 2024-05-08 16:18:58 · 287 阅读 · 0 评论 -
Linux编程: 在业务线程中注册和处理Linux信号
在Linux编程中,信号是一种重要的IPC(进程间通信)机制。信号可以通知进程发生了某些事件,如终止进程、定时器到期等。除了常用的信号(如`SIGINT`、`SIGTERM`等),还有一些较为冷门的信号,可以用于自定义用途。本文将简述如何在C++程序的业务线程中注册和处理这些信号。原创 2024-07-24 21:07:04 · 470 阅读 · 0 评论 -
Linux编程:使用 strip 命令优化 ELF 文件大小
在软件开发过程中,经常需要处理各种各样的可执行文件和共享库。为了提高系统的性能和减少磁盘占用空间,我们可能会对这些文件进行优化。其中之一就是使用 `strip` 命令来移除 ELF (Executable and Linkable Format) 文件中的非必要数据。本文将探讨 `strip` 命令的工作原理及其使用方法。原创 2024-07-27 22:31:43 · 1009 阅读 · 0 评论 -
定位和分析解决std::thread创建失败的问题和解决方法(mmap虚拟地址耗尽)
在高并发和长周期运行的环境中,频繁创建`std::thread`线程可能导致mmap虚拟地址空间耗尽,进而引发资源不足的错误。本文提出的增大mmap区域、优化线程栈空间以及引入线程池的策略,能够有效地管理线程资源,提高应用的稳定性和效率。原创 2024-07-10 01:00:04 · 914 阅读 · 0 评论 -
C++11 unordered_map的使用
C++11 unordered_map的使用原创 2022-07-02 23:19:09 · 278 阅读 · 0 评论 -
使用C++11实现的非阻塞消息总线message_bus
消息总线(Message Bus)作为一种重要的通信模式,被应用于解耦系统中的组件,实现异步通信和事件驱动架构。本文将介绍如何使用C++11实现一个非阻塞消息总线,通过异步处理消息来提高系统的并发性能和响应速度。原创 2022-06-29 09:33:21 · 1025 阅读 · 0 评论 -
基于ConsumerProducer库的多线程任务处理模块 (符合Misra C++)
ConsumerProducer库是一个用于多线程任务处理的C++库。它提供了一种机制,允许用户定义任务的优先级和处理方式,并通过多线程方式高效地处理任务队列中的任务。模块提供设置线程优先级、处理线程个数及任务队列个数的功能;模块提供低优先级队列和高优先级队列管理功能。生产者添加任务的时候会根据优先级添加到低优先级队列还是高优先级队列,消费者获取任务的时候优先获取高优先级队列中的任务进行处理。模块具有统计任务总的等待时间消耗,处理时间消耗、丢弃时间消耗信息的功能。原创 2024-05-12 18:32:05 · 1026 阅读 · 0 评论 -
符合Misra C++标准且支持mmap的内存池管理模块
定义内存管理的相关行为。使用了预分配的管理,先分配一块足够大的内存,然后需要时再从这块内存中进行分配。原创 2024-05-12 10:03:50 · 950 阅读 · 0 评论 -
使用`LD_PRELOAD`和`jemalloc`实现C/C++信号的内存堆栈信息收集
本文介绍如何结合`LD_PRELOAD`与`jemalloc`,在接收到`SIGUSR1`信号时打印程序的堆栈信息。详细步骤包括编译和配置`jemalloc`,编写信号处理程序,并通过`LD_PRELOAD`加载共享库的方法。原创 2024-06-09 20:37:25 · 862 阅读 · 0 评论 -
C++多线程编程中的隐形杀手:volatile关键字
C++中std::mutex本身是一个非volatile类型的对象,但是它保护的共享资源可能需要被volatile修饰,以确保对该资源的修改在不同线程之间的可见性。这种情况通常发生在多线程访问共享数据时,这些数据可能被异步修改,且修改的发生时间点无法预测。原创 2024-05-11 17:49:52 · 351 阅读 · 0 评论 -
性能评测技术: C++堆栈操作与宏定义的效率比较
这篇文章将通过代码示例比较三种不同的操作方式在性能上的差异。评测内容包括:使用堆栈临时变量的函数 test_stack使用 always_inline 关键字声明的内联函数 test_stack_always_inline利用宏定义 TEST_MACRO 模拟的代码块原创 2024-05-23 09:54:42 · 254 阅读 · 0 评论 -
符合Misra C++的跨平台md5库封装
这两个文件提供了 MD5 算法的底层实现。md5.cpp 则实现了这四个函数的具体逻辑,通过复杂的 bit 操作完成 MD5 算法的运算过程。例如,计算字符串的 MD5 值、计算文件哈希值,以及校验文件与。这两个文件提供了更易于使用的 MD5 计算接口。md5.cpp 文件包含了 MD5 算法的核心实现。函数来计算字符串内容的 MD5 哈希值,然后将结果转换为字符串格式并存储在。类提供了对 MD5 算法的封装,简化了用户的使用。md5_test.cpp 文件提供了完整的示例代码,演示了如何使用。原创 2024-05-14 07:24:18 · 1035 阅读 · 0 评论 -
Misra C++编程 0 warning示例代码
【代码】Misra C++编程 0 warning示例代码。原创 2024-05-12 20:44:25 · 185 阅读 · 0 评论 -
C++ 实现一个简单的状态机和行为树结合示例
用纯 C++ 实现一个简单的状态机和行为树示例,不依赖外部库。 结合有限状态机和行为树,并引入条件判断和随机性,设计一个简单的门控制系统。原创 2024-06-22 17:19:57 · 1104 阅读 · 0 评论