调试实战 | 记一次有教益的 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()分配内存。
➡️