调试实战 | 记一次有教益的 vs2022 内存分配失败崩溃分析(续)

💡 原文中文,约3900字,阅读约需10分钟。
📝

内容提要

本文分析了vs2022卡死问题,重点挖掘了崩溃前vs2022已分配的内容。通过查找vector对象地址和查看vector内容,得出vector中元素个数为40360465,验证了之前的分析。同时发现vector中每个元素的引用计数对象地址+0x10等于实际对象地址,推测vector中存储的对象是通过std::make_shared()创建的。文章总结了procdump的使用和64位进程的虚拟内存空间。

🎯

关键要点

  • 本文分析了vs2022卡死问题,重点挖掘崩溃前已分配的内容。
  • 崩溃原因是vs2022尝试分配923MB内存时,物理内存和页文件不足。
  • 通过调用栈分析,找到vector对象地址和内容。
  • vector中元素个数为40360465,验证了之前的分析。
  • 发现vector中每个元素的引用计数对象地址+0x10等于实际对象地址,推测对象是通过std::make_shared()创建的。
  • 总结了procdump的使用和64位进程的虚拟内存空间。
  • 64位进程的虚拟内存空间为256TB,用户态可用128TB。
  • 使用malloc()或new()分配内存超出堆阈值时,使用NtAllocateVirtualMemory()分配内存。
➡️

继续阅读