📄 mmgr.h
字号:
// ---------------------------------------------------------------------------------------------------------------------------------// _ // | | // _ __ ___ _ __ ___ __ _ _ __ | |__ // | '_ ` _ \| '_ ` _ \ / _` | '__| | '_ \ // | | | | | | | | | | | (_| | | _ | | | |// |_| |_| |_|_| |_| |_|\__, |_| (_)|_| |_|// __/ | // |___/ //// Memory manager & tracking software//// Best viewed with 8-character tabs and (at least) 132 columns//// ---------------------------------------------------------------------------------------------------------------------------------//// Restrictions & freedoms pertaining to usage and redistribution of this software://// * This software is 100% free// * If you use this software (in part or in whole) you must credit the author.// * This software may not be re-distributed (in part or in whole) in a modified// form without clear documentation on how to obtain a copy of the original work.// * You may not use this software to directly or indirectly cause harm to others.// * This software is provided as-is and without warrantee. Use at your own risk.//// For more information, visit HTTP://www.FluidStudios.com//// ---------------------------------------------------------------------------------------------------------------------------------// Originally created on 12/22/2000 by Paul Nettle//// Copyright 2000, Fluid Studios, Inc., all rights reserved.// ---------------------------------------------------------------------------------------------------------------------------------#ifndef _H_MMGR#define _H_MMGR
#ifdef __APPLE_CC__
//MAC hjm 7/11/2000typedef unsigned long size_t;#endif
// ---------------------------------------------------------------------------------------------------------------------------------// For systems that don't have the __FUNCTION__ variable, we can just define it here// ---------------------------------------------------------------------------------------------------------------------------------#define __FUNCTION__ "??"// ---------------------------------------------------------------------------------------------------------------------------------// Types// ---------------------------------------------------------------------------------------------------------------------------------typedef struct tag_au{ size_t actualSize; size_t reportedSize; void *actualAddress; void *reportedAddress; char sourceFile[40]; char sourceFunc[40]; unsigned int sourceLine; unsigned int allocationType; bool breakOnDealloc; bool breakOnRealloc; unsigned int allocationNumber; struct tag_au *next; struct tag_au *prev;} sAllocUnit;typedef struct{ unsigned int totalReportedMemory; unsigned int totalActualMemory; unsigned int peakReportedMemory; unsigned int peakActualMemory; unsigned int accumulatedReportedMemory; unsigned int accumulatedActualMemory; unsigned int accumulatedAllocUnitCount; unsigned int totalAllocUnitCount; unsigned int peakAllocUnitCount;} sMStats;// ---------------------------------------------------------------------------------------------------------------------------------// External constants// ---------------------------------------------------------------------------------------------------------------------------------extern const unsigned int m_alloc_unknown;extern const unsigned int m_alloc_new;extern const unsigned int m_alloc_new_array;extern const unsigned int m_alloc_malloc;extern const unsigned int m_alloc_calloc;extern const unsigned int m_alloc_realloc;extern const unsigned int m_alloc_delete;extern const unsigned int m_alloc_delete_array;extern const unsigned int m_alloc_free;// ---------------------------------------------------------------------------------------------------------------------------------// Used by the macros// ---------------------------------------------------------------------------------------------------------------------------------void m_setOwner(const char *file, const unsigned int line, const char *func);// ---------------------------------------------------------------------------------------------------------------------------------// Allocation breakpoints// ---------------------------------------------------------------------------------------------------------------------------------bool &m_breakOnRealloc(void *reportedAddress);bool &m_breakOnDealloc(void *reportedAddress);// ---------------------------------------------------------------------------------------------------------------------------------// The meat of the memory tracking software// ---------------------------------------------------------------------------------------------------------------------------------void *m_allocator(const char *sourceFile, const unsigned int sourceLine, const char *sourceFunc, const unsigned int allocationType, const size_t reportedSize);void *m_reallocator(const char *sourceFile, const unsigned int sourceLine, const char *sourceFunc, const unsigned int reallocationType, const size_t reportedSize, void *reportedAddress);void m_deallocator(const char *sourceFile, const unsigned int sourceLine, const char *sourceFunc, const unsigned int deallocationType, const void *reportedAddress);// ---------------------------------------------------------------------------------------------------------------------------------// Utilitarian functions// ---------------------------------------------------------------------------------------------------------------------------------bool m_validateAddress(const void *reportedAddress);bool m_validateAllocUnit(const sAllocUnit *allocUnit);bool m_validateAllAllocUnits();// ---------------------------------------------------------------------------------------------------------------------------------// Unused RAM calculations// ---------------------------------------------------------------------------------------------------------------------------------unsigned int m_calcUnused(const sAllocUnit *allocUnit);unsigned int m_calcAllUnused();// ---------------------------------------------------------------------------------------------------------------------------------// Logging and reporting// ---------------------------------------------------------------------------------------------------------------------------------void m_dumpAllocUnit(const sAllocUnit *allocUnit, const char *prefix = "");void m_dumpMemoryReport(const char *filename = "memreport.log", const bool overwrite = true);sMStats m_getMemoryStatistics();// ---------------------------------------------------------------------------------------------------------------------------------// Variations of global operators new & delete// ---------------------------------------------------------------------------------------------------------------------------------void *operator new(size_t reportedSize);void *operator new[](size_t reportedSize);void *operator new(size_t reportedSize, const char *sourceFile, int sourceLine);void *operator new[](size_t reportedSize, const char *sourceFile, int sourceLine);void operator delete(void *reportedAddress);void operator delete[](void *reportedAddress);#endif // _H_MMGR// ---------------------------------------------------------------------------------------------------------------------------------// Macros -- "Kids, please don't try this at home. We're trained professionals here." :)// ---------------------------------------------------------------------------------------------------------------------------------#include "nommgr.h"#define new (m_setOwner (__FILE__,__LINE__,__FUNCTION__),false) ? NULL : new#define delete (m_setOwner (__FILE__,__LINE__,__FUNCTION__),false) ? m_setOwner("",0,"") : delete#define malloc(sz) m_allocator (__FILE__,__LINE__,__FUNCTION__,m_alloc_malloc,sz)#define calloc(sz) m_allocator (__FILE__,__LINE__,__FUNCTION__,m_alloc_calloc,sz)#define realloc(ptr,sz) m_reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)#define free(ptr) m_deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)// ---------------------------------------------------------------------------------------------------------------------------------// mmgr.h - End of file// ---------------------------------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -