随笔分类 -  C/C++

摘要:目录主要功能1. 检测的内存错误类型2. 工作原理3. 性能影响使用方法GCC/Clang编译选项环境变量示例问题代码编译和运行ASan输出示例其他相关工具1. ThreadSanitizer (TSan)2. MemorySanitizer (MSan)3. UndefinedBehaviorSa 阅读全文
posted @ 2026-01-16 10:45 guanyubo 阅读(14) 评论(0) 推荐(0)
摘要:目录1. 什么是 Singleton 模式?2. 传统的 Singleton 实现及其问题3. Meyer‘s Singleton:现代而优雅的解决方案实现代码4. Meyer’s Singleton 的工作原理与关键特性5. 使用方法6. 优点7. 潜在缺点与注意事项总结全局锁(单例模式) 1. 阅读全文
posted @ 2025-10-31 17:23 guanyubo 阅读(57) 评论(0) 推荐(0)
摘要:目录什么是 Arena?为什么需要 Arena?单线程时代的问题多线程时代的挑战glibc malloc 的 Arena 实现1. Arena 数据结构2. Arena 分配策略3. Arena 数量限制jemalloc 的 Arena 改进1. 更细粒度的 Arena 管理2. Arena 分配算 阅读全文
posted @ 2025-10-19 10:06 guanyubo 阅读(132) 评论(0) 推荐(0)
摘要:目录问题描述问题根源:glibc malloc的内存管理缺陷1. 内存碎片化2. arena竞争3. gRPC特有的内存模式jemalloc的优势1. 更好的碎片管理2. 主动的内存归还3. 线程局部缓存优化解决方案对比glibc malloc的问题表现jemalloc的改进最佳实践配置1. jem 阅读全文
posted @ 2025-10-19 09:44 guanyubo 阅读(43) 评论(0) 推荐(0)
摘要:目录1. 安装 Jemalloc2. 编译时链接 Jemalloc方法一:修改 CMakeLists.txt方法二:直接使用编译器参数3. 运行时配置 Jemalloc通过环境变量配置推荐的 gRPC 服务 Jemalloc 配置4. 在代码中集成 Jemalloc 监控5. Docker 容器中的 阅读全文
posted @ 2025-10-19 09:41 guanyubo 阅读(46) 评论(0) 推荐(0)
摘要:目录一、 Jemalloc 是什么?Jemalloc 的核心目标和优势:与系统默认分配器(ptmalloc)的简单对比:二、 怎么使用 Jemalloc?方法 1:动态链接(最常见和简单的方式)方法 2:静态链接(在编译时链接)三、 高级用法:调优和监控常用的环境变量:常见的 MALLOC_CONF 阅读全文
posted @ 2025-10-19 09:38 guanyubo 阅读(380) 评论(0) 推荐(0)
摘要:目录什么是多重继承?基本语法多重继承的应用场景菱形继承问题虚继承解决方案向上转型详解基本向上转型多重继承中的向上转型使用dynamic_cast进行安全向下转型最佳实践与注意事项总结 在C++面向对象编程中,多重继承和向上转型是两个重要但容易混淆的概念。本文将深入探讨这两个特性,帮助开发者更好地理解 阅读全文
posted @ 2025-08-29 17:12 guanyubo 阅读(51) 评论(0) 推荐(0)
摘要:目录🎯 一、设计模式选型策略1. 核心设计模式应用2. 模式选型对照表3. 选型原则总结💻 二、C++开发技巧精华1. 资源管理技巧2. 线程安全实现3. 接口设计技巧4. 错误处理策略🏗️ 三、架构设计要点1. 分层架构设计2. 模块化设计原则🚀 四、性能优化技巧1. 内存优化2. 并发优 阅读全文
posted @ 2025-08-29 16:44 guanyubo 阅读(132) 评论(0) 推荐(0)
摘要:目录一、基础概念题1. 什么是构造函数和析构函数?它们的作用是什么?2. 如果没有显式定义构造函数和析构函数,会发生什么?二、构造函数相关题3. 什么是拷贝构造函数?什么时候会被调用?4. 什么是移动构造函数(C++11)?它与拷贝构造函数的区别?5. 构造函数能否是虚函数?为什么?6. 构造函数抛 阅读全文
posted @ 2025-03-26 15:33 guanyubo 阅读(393) 评论(0) 推荐(0)
摘要:目录一、检查并启用核心文件生成二、指定核心文件生成路径三、使用GDB调试核心文件 一、检查并启用核心文件生成 查看当前核心文件大小限制: 使用命令 ulimit -c 来查看系统允许的核心文件大小。如果返回值为0,则表示不生成核心文件。 临时设置无限制的核心文件大小: 在当前shell会话中执行 u 阅读全文
posted @ 2024-12-23 14:36 guanyubo 阅读(821) 评论(0) 推荐(0)
摘要:目录代码实现1. code_convert 函数2. u2g 和 g2u 函数3. GBKToUTF8 函数4. UTF8toGBK 函数总结 代码实现 #include <iconv.h> #include <iostream> #include <string.h> #include <mall 阅读全文
posted @ 2024-11-25 16:24 guanyubo 阅读(1034) 评论(0) 推荐(0)
摘要:目录 include文件地址需要在命令行使用g++ -v -E -x c++ -去找 g++ -v -E -x c++ - 检测到 #include 错误。请更新 includePath问题 阅读全文
posted @ 2024-10-09 17:23 guanyubo 阅读(125) 评论(0) 推荐(0)
摘要:目录CFLAGSLDFLAGS 在编译 C/C++ 程序时,可以使用 CFLAGS 和 LDFLAGS 环境变量来设置编译器和链接器的选项。下面对 CFLAGS 和 LDFLAGS 进行详解: CFLAGS CFLAGS 是用于设置 C/C++ 编译器选项的环境变量。它可以用来指定编译过程中的各种选 阅读全文
posted @ 2024-10-09 10:52 guanyubo 阅读(1548) 评论(0) 推荐(0)
摘要:RAII指的是“资源获取就是初始化”(Resource Allocation Is Initialization),它被视作C++中最强大的编程范式之一。 简单说来,它指的是,用构造函数来获取一个对象的资源,相应的,借助析构函数来释放对象的资源。 为了理解这一范式的用处,让我们考虑某个函数使用文件句 阅读全文
posted @ 2024-09-23 16:47 guanyubo 阅读(43) 评论(0) 推荐(0)
摘要:目录如何查看地址值查看当前函数参数多线程调试只暂停指定线程,其他线程不影响总结 如何查看地址值 查看下一个地址:x/x 0x12345679 以八进制显示:x/o 0x12345678 以十进制显示:x/d 0x12345678 显示更多的地址和值:x/8xw 0x12345678(显示从该地址开始 阅读全文
posted @ 2024-08-26 14:14 guanyubo 阅读(105) 评论(0) 推荐(0)
摘要:在C++中,可以使用标准库中的头文件提供的ofstream类来打开文件,并使用std::freopen函数将stdout重定向到该文件。以下是一个示例代码,展示如何将printf输出重定向到日志文件中: #include <cstdio> #include <fstream> int main() 阅读全文
posted @ 2024-07-25 10:18 guanyubo 阅读(505) 评论(0) 推荐(0)
摘要:目录PImpl简介第43条 明智地使用Pimpl PImpl简介 PIMPL(Pointer to Implementation)是通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏。 PImpl的优点: //x.h class X { public: void Fun(); priva 阅读全文
posted @ 2024-07-11 15:47 guanyubo 阅读(121) 评论(0) 推荐(0)
摘要:目录什么是C语言?什么是C++?什么是C#?主要不同C与C++C++与C#C与C# 什么是C语言? 我们先从C语言(C programming language)开始,因为它是三种语言中资格最老、使用最广的一种。丹尼斯·里奇(Dennis Ritchie)于1972年发明了它,然后于1978年出版。 阅读全文
posted @ 2024-07-02 09:19 guanyubo 阅读(454) 评论(0) 推荐(0)
摘要:c++ final 关键字 阅读全文
posted @ 2024-07-01 16:31 guanyubo 阅读(274) 评论(0) 推荐(0)
摘要:目录1. 引入命名空间成员2. 类型别名(typedef的升级版)3. 重载函数解析4. 命名空间别名5. using 声明与 typedef 的对比 在C++中,using 是一个多功能关键字,它有几种不同的用途,主要涉及到命名空间、类型别名以及重载决议等方面。下面分别对这些用途进行解释: 1. 阅读全文
posted @ 2024-06-24 14:30 guanyubo 阅读(543) 评论(0) 推荐(0)