memtracker.h revision 2d1ce39e8bc6e75cadfc0a48ada30c52bc3eae0e
/** @file
* IPRT - Memory Tracker.
*/
/*
* Copyright (C) 2010 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* The contents of this file may alternatively be used under the terms
* of the Common Development and Distribution License Version 1.0
* (CDDL) only, as it comes in the "COPYING.CDDL" file of the
* VirtualBox OSE distribution, in which case the provisions of the
* CDDL are applicable instead of those of the GPL.
*
* You may elect to license modified versions of this file under the
* terms and conditions of either the GPL or the CDDL or both.
*/
#ifndef ___iprt_memtracker_h
#define ___iprt_memtracker_h
/** @defgroup grp_rt_memtracker RTMemTracker - Memory Allocation Tracker.
* @ingroup grp_rt
* @{
*/
/**
* The allocation/free method.
*/
typedef enum RTMEMTRACKERMETHOD
{
RTMEMTRACKERMETHOD_32BIT_HACK = 0x7fffffff
/** Pointer to a tag structure. */
typedef struct RTMEMTRACKERTAG *PRTMEMTRACKERTAG;
/**
* Memory Tracking Header for use with RTMemTrackerHdrAlloc,
* RTMemTrackerHdrReallocPrep, RTMemTrackerHdrReallocDone and
* RTMemTrackerHdrFree.
*/
typedef struct RTMEMTRACKERHDR
{
/** Magic value / eye catcher (RTMEMTRACKERHDR_MAGIC). */
/** The allocation size. */
/** The list entry. */
/** The tag string. */
const char *pszTag;
/** Pointer to the per-tag structure. */
/** Alignmnet padding. */
void *pvAlignment[2];
/** Magic value for RTMEMTRACKERHDR::uMagic (Kelly Link). */
#if ARCH_BITS == 64
#else
#endif
/**
* Initializes the allocation header and links it to the relevant tag.
*
* @returns Pointer to the user data part.
* @param pv The header + user data block. This must be at
* least @a cb + sizeof(RTMEMTRACKERHDR).
* @param cb The user data size (bytes).
* @param pszTag The tag string.
* @param enmMethod The method that the user called.
*/
RTDECL(void *) RTMemTrackerHdrAlloc(void *pv, size_t cb, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
/**
* Prepares for a realloc, i.e. invalidates the header.
*
* @returns Pointer to the user data part.
* @param pvOld Pointer to the old user data.
* @param cbOld The size of the old user data, 0 if not known.
* @param pszTag The tag string.
* @param enmMethod The method that the user called.
*/
RTDECL(void *) RTMemTrackerHdrReallocPrep(void *pvOld, size_t cbOld, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
/**
* Initializes the allocation header and links it to the relevant tag.
*
* @returns Pointer to the user data part.
* @param pvNew The new header + user data block. This must be
* at least @a cb + sizeof(RTMEMTRACKERHDR). If
* this is NULL, we assume the realloc() call
* failed.
* @param cbNew The user data size (bytes).
* @param pvOld Pointer to the old user data. This is only
* valid on failure of course and used to bail out
* in that case. Should not be NULL.
* @param pszTag The tag string.
* @param enmMethod The method that the user called.
*/
RTDECL(void *) RTMemTrackerHdrReallocDone(void *pvNew, size_t cbNew, void *pvOld, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
/**
* Do the accounting on free.
*
* @returns @a pv.
* @param pv Pointer to the user data.
* @param cb The size of the user data, 0 if not known.
* @param pszTag The tag string.
* @param enmMethod The method that the user called.
*/
RTDECL(void *) RTMemTrackerHdrFree(void *pv, size_t cb, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
/**
* Dumps all the allocations and tag statistics to the log.
*/
RTDECL(void) RTMemTrackerDumpAllToLog(void);
/**
* Dumps all the allocations and tag statistics to the release log.
*/
RTDECL(void) RTMemTrackerDumpAllToRelLog(void);
/**
* Dumps all the allocations and tag statistics to standard out.
*/
RTDECL(void) RTMemTrackerDumpAllToStdOut(void);
/**
* Dumps all the allocations and tag statistics to standard err.
*/
RTDECL(void) RTMemTrackerDumpAllToStdErr(void);
/**
* Dumps all the allocations and tag statistics to the specified filename.
*/
/**
* Dumps all the tag statistics to the log.
*/
RTDECL(void) RTMemTrackerDumpStatsToLog(void);
/**
* Dumps all the tag statistics to the release log.
*/
RTDECL(void) RTMemTrackerDumpStatsToRelLog(void);
/**
* Dumps all the tag statistics to standard out.
*/
RTDECL(void) RTMemTrackerDumpStatsToStdOut(void);
/**
* Dumps all the tag statistics to standard err.
*/
RTDECL(void) RTMemTrackerDumpStatsToStdErr(void);
/**
* Dumps all the tag statistics to the specified filename.
*/
/** @} */
#endif