IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【ZeloEngine】C++内存泄漏检测 -> 正文阅读

[C++知识库]【ZeloEngine】C++内存泄漏检测

【ZeloEngine】C++内存泄漏检测

需求

  • 定位泄漏内存的分配代码
  • 屏蔽模块,比如屏蔽第三方库,以及用于二分定位

内存泄漏的主要问题是会导致不应该的内存占用高

反过来说,内存占用高到影响运行,才需要来检测内存泄漏

平时开发,吃不准内存生命周期时,也可以用工具来验证一下

SDL_Init里有一个new int,每次都会报它泄漏,因为他没有回收

这种泄漏就无伤大雅,没必要改,应该加入ignore
在这里插入图片描述

工具

  • windows,vld,crtdbg(vld更好)
  • linux,valgrind(没用过,clion已经集成)

工具有false-positive的问题,需要调教

如何写不会泄漏的代码

  • 厘清内存生命周期
  • 仅在小范围内使用new和delete
  • 大部分情况使用unique_ptr替代裸指针
  • 复杂情况使用GC

MISC
* 基类的析构函数必须是虚函数

案例分析

【LuaAI引擎魔改】-03-内存泄露 - 左亦的文章 - 知乎

CrtDbg

虽然不用了,但是归档一下笔记

跟踪new和delete,包括封装指针为句柄,添加全局管理指针泄漏的数据结构

在程序启动和退出时,做内存快照进行diff,对比出没有回收的内存,输出报告

  • Windows的CRT库在debug版本创建调试堆
    • 堆内存=0xCDCDCDCD
    • 栈内存=0xCCCCCCCC
    • 被释放的堆内存重新分配前=0xFEEEEEEE
      § 有时,将被释放的内存=0xDDDDDDDD
    • ????
    • 总之,调试堆通过这种方式来标识内存状态
    • 测试一下,使用强制在0处分配内存等方式,查看VS的内存窗口
  • 函数
    • _CrtSetDbgFlag:设置调试堆的参数和行为
    • _CrtCheckMemory:检查
    • _CrtDumpMemoryLeak:输出报告
  • _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF
    • _CRTDBG_ALLOC_MEM_DF
      § free的内存不要放回freelist,而是专门保存在一个特殊的list,一遍跟踪内存损坏
    • _CRTDBG_LEAK_CHECK_DF
      § 每次malloc和free都进行内存检查(_CrtCheckMemory)
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:17:43  更:2021-12-24 18:18:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:14:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码