重载C++的new operator来检查内存分配情况
傻逼客户要求我提交一份程序内存分配情况的报告,要求有单元名,函数名,分配行号,分配的最大尺寸,是否有内存泄漏。
malloc还比较好办, 用个宏替换一下就行。new 分配符分配的内存就比较麻烦。看了一下代码中用new的地方有300多处,每个地方加log累死了,于是查了半天,发现可以用重载new operator的方法来实现。
inline void * _cdecl operator new (size_t cbSize, char *szFile , char* szFunc, UINT nLineNo)
{
void *p = malloc(cbSize );
printf ("file \"%s\" func:%s line: %d size:%d.\n",szFile, szFunc, nLineNo, cbSize);
// we return the address + sizeof(AllocHeader)
return p;
}
inline void _cdecl operator delete(void *p)
{
free(p);
}
#define new new(__FILE__, __FUNCTION__, __LINE__)
注意,要重载new abc[]这种调用,还要另外写重载操作符。
就在我刚刚写完这篇日志之后,我突然发现这篇帖子,他的方法简直太聪明了,真是一个天才的想法。
http://stackoverflow.com/questions/619467/macro-to-replace-c-operator-new