相关疑难解决方法(0)

如何在我的C++程序中检测和估计堆碎片?

我正在开发一个VC++ NT服务,该服务旨在持续运行数月.它密集使用VC++运行时堆.很明显,堆碎片在某些时候会导致它出现故障(认为它是内存不足).

我可以在我的服务上运行哪些测试来估计它容易出现堆碎片的程度?

c++ memory heap visual-c++

8
推荐指数
2
解决办法
4341
查看次数

除了查找可重现的内存泄漏之外,我可以使用Visual C++ Debug CRT分配挂钩做些什么?

Visual C++调试运行时库具有所谓的分配挂钩.以这种方式工作:您定义一个回调并调用_CrtSetAllocHook()以设置该回调.现在,每次完成内存分配/释放/重新分配时,CRT会调用该回调并传递一些参数.

我成功地使用了一个分配钩子来找到一个可重现的内存泄漏 - 基本上CRT报告在程序终止时有一个分配编号为N(在每个程序运行时N都相同)的不一致块,所以我在我的钩子中编写了以下内容:

int MyAllocHook( int allocType, void* userData, size_t size, int blockType, 
    long requestNumber, const unsigned char* filename, int lineNumber)
{
     if( requestNumber == TheNumberReported ) {
         Sleep( 0 );// a line to put breakpoint on
     }
     return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

因为每次我只能在if语句中放入一个断点并等待它被击中然后检查调用堆栈,就会报告泄漏的分配编号非常相同.

使用分配挂钩可以做些什么其他有用的事情?

memory debugging memory-management visual-c++

3
推荐指数
1
解决办法
1067
查看次数

标签 统计

memory ×2

visual-c++ ×2

c++ ×1

debugging ×1

heap ×1

memory-management ×1