VirtualBox

Changeset 36597 in vbox for trunk/include/iprt


Ignore:
Timestamp:
Apr 6, 2011 7:46:15 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
71042
Message:

IPRT: Implemented the memory tracker.

Location:
trunk/include/iprt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/mangling.h

    r36581 r36597  
    747747# define RTMemTmpAllocZTag                              RT_MANGLER(RTMemTmpAllocZTag)
    748748# define RTMemTmpFree                                   RT_MANGLER(RTMemTmpFree)
     749# define RTMemTrackerDumpAllToFile                      RT_MANGLER(RTMemTrackerDumpAllToFile)
     750# define RTMemTrackerDumpAllToLog                       RT_MANGLER(RTMemTrackerDumpAllToLog)
     751# define RTMemTrackerDumpAllToLogRel                    RT_MANGLER(RTMemTrackerDumpAllToLogRel)
     752# define RTMemTrackerDumpAllToStdErr                    RT_MANGLER(RTMemTrackerDumpAllToStdErr)
     753# define RTMemTrackerDumpAllToStdOut                    RT_MANGLER(RTMemTrackerDumpAllToStdOut)
     754# define RTMemTrackerDumpStatsToFile                    RT_MANGLER(RTMemTrackerDumpStatsToFile)
     755# define RTMemTrackerDumpStatsToLog                     RT_MANGLER(RTMemTrackerDumpStatsToLog)
     756# define RTMemTrackerDumpStatsToLogRel                  RT_MANGLER(RTMemTrackerDumpStatsToLogRel)
     757# define RTMemTrackerDumpStatsToStdErr                  RT_MANGLER(RTMemTrackerDumpStatsToStdErr)
     758# define RTMemTrackerDumpStatsToStdOut                  RT_MANGLER(RTMemTrackerDumpStatsToStdOut)
     759# define RTMemTrackerHdrAlloc                           RT_MANGLER(RTMemTrackerHdrAlloc)
     760# define RTMemTrackerHdrFree                            RT_MANGLER(RTMemTrackerHdrFree)
     761# define RTMemTrackerHdrReallocDone                     RT_MANGLER(RTMemTrackerHdrReallocDone)
     762# define RTMemTrackerHdrReallocPrep                     RT_MANGLER(RTMemTrackerHdrReallocPrep)
    749763# define RTMemWipeThoroughly                            RT_MANGLER(RTMemWipeThoroughly)
    750764# define RTMpCpuId                                      RT_MANGLER(RTMpCpuId)
     
    13861400# define RTThreadGetType                                RT_MANGLER(RTThreadGetType)
    13871401# define RTThreadIsInInterrupt                          RT_MANGLER(RTThreadIsInInterrupt)      /* r0drv */
     1402# define RTThreadIsInitialized                          RT_MANGLER(RTThreadIsInitialized)
    13881403# define RTThreadIsMain                                 RT_MANGLER(RTThreadIsMain)
     1404# define RTThreadIsSelfAlive                            RT_MANGLER(RTThreadIsSelfAlive)
     1405# define RTThreadIsSelfKnown                            RT_MANGLER(RTThreadIsSelfKnown)
    13891406# define RTThreadNativeSelf                             RT_MANGLER(RTThreadNativeSelf)
    13901407# define RTThreadPoke                                   RT_MANGLER(RTThreadPoke) /* not-win not-os2 */
  • trunk/include/iprt/memtracker.h

    r32431 r36597  
    4646    RTMEMTRACKERMETHOD_ALLOC,
    4747    RTMEMTRACKERMETHOD_ALLOCZ,
    48     RTMEMTRACKERMETHOD_REALLOC,
     48    RTMEMTRACKERMETHOD_REALLOC_PREP,   /**< Internal, don't use. */
     49    RTMEMTRACKERMETHOD_REALLOC_DONE,   /**< Internal, don't use. */
     50    RTMEMTRACKERMETHOD_REALLOC_FAILED, /**< Internal, don't use. */
    4951    RTMEMTRACKERMETHOD_FREE,
    5052
     
    6062typedef struct RTMEMTRACKERTAG *PRTMEMTRACKERTAG;
    6163
     64/** Pointer to a user structure. */
     65typedef struct RTMEMTRACKERUSER *PRTMEMTRACKERUSER;
     66
    6267/**
    6368 * Memory Tracking Header for use with RTMemTrackerHdrAlloc,
     
    6974    /** Magic value / eye catcher (RTMEMTRACKERHDR_MAGIC). */
    7075    size_t              uMagic;
    71     /** The allocation size.  */
    72     size_t              cbSize;
     76    /** The allocation size, user data only.  */
     77    size_t              cbUser;
    7378    /** The list entry. */
    7479    RTLISTNODE          ListEntry;
     80    /** Pointer to the user structure where this header is linked. */
     81    PRTMEMTRACKERUSER   pUser;
     82    /** Pointer to the per-tag structure. */
     83    PRTMEMTRACKERTAG    pTag;
    7584    /** The tag string. */
    7685    const char         *pszTag;
    77     /** Pointer to the per-tag structure. */
    78     PRTMEMTRACKERTAG    pTag;
    79     /** Alignmnet padding. */
    80     void               *pvAlignment[2];
     86    /** Pointer to the user data we're tracking. */
     87    void               *pvUser;
    8188} RTMEMTRACKERHDR;
     89/** Pointer to a memory tracker header. */
     90typedef RTMEMTRACKERHDR *PRTMEMTRACKERHDR;
     91/** Pointer to a const memory tracker header. */
     92typedef RTMEMTRACKERHDR *PPRTMEMTRACKERHDR;
    8293
    8394/** Magic value for RTMEMTRACKERHDR::uMagic (Kelly Link). */
    8495#if ARCH_BITS == 64
    85 # define RTMEMTRACKERHDR_MAGIC   UINT64_C(0x1907691919690719)
     96# define RTMEMTRACKERHDR_MAGIC          UINT64_C(0x1907691919690719)
    8697#else
    87 # define RTMEMTRACKERHDR_MAGIC   UINT32_C(0x19690719)
     98# define RTMEMTRACKERHDR_MAGIC          UINT32_C(0x19690719)
    8899#endif
     100/** Magic number used when reallocated. */
     101#if ARCH_BITS == 64
     102# define RTMEMTRACKERHDR_MAGIC_REALLOC  UINT64_C(0x0000691919690000)
     103#else
     104# define RTMEMTRACKERHDR_MAGIC_REALLOC  UINT32_C(0x19690000)
     105#endif
     106/** Magic number used when freed. */
     107#define RTMEMTRACKERHDR_MAGIC_FREE      (~RTMEMTRACKERHDR_MAGIC)
     108
    89109
    90110/**
     
    94114 * @param   pv                  The header + user data block.  This must be at
    95115 *                              least @a cb + sizeof(RTMEMTRACKERHDR).
    96  * @param   cb                  The user data size (bytes).
     116 * @param   cbUser              The user data size (bytes).
    97117 * @param   pszTag              The tag string.
    98118 * @param   enmMethod           The method that the user called.
    99119 */
    100 RTDECL(void *) RTMemTrackerHdrAlloc(void *pv, size_t cb, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
     120RTDECL(void *) RTMemTrackerHdrAlloc(void *pv, size_t cbUser, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
    101121
    102122/**
     
    104124 *
    105125 * @returns Pointer to the user data part.
    106  * @param   pvOld               Pointer to the old user data.
    107  * @param   cbOld               The size of the old user data, 0 if not known.
    108  * @param   pszTag              The tag string.
    109  * @param   enmMethod           The method that the user called.
    110  */
    111 RTDECL(void *) RTMemTrackerHdrReallocPrep(void *pvOld, size_t cbOld, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
     126 * @param   pvOldUser           Pointer to the old user data.
     127 * @param   cbOldUser           The size of the old user data, 0 if not
     128 *                              known.
     129 * @param   pszTag              The tag string.
     130 */
     131RTDECL(void *) RTMemTrackerHdrReallocPrep(void *pvOldUser, size_t cbOldUser, const char *pszTag);
    112132
    113133/**
     
    119139 *                              this is NULL, we assume the realloc() call
    120140 *                              failed.
    121  * @param   cbNew               The user data size (bytes).
    122  * @param   pvOld               Pointer to the old user data.  This is only
     141 * @param   cbNewUser           The user data size (bytes).
     142 * @param   pvOldUser           Pointer to the old user data.  This is only
    123143 *                              valid on failure of course and used to bail out
    124144 *                              in that case.  Should not be NULL.
    125145 * @param   pszTag              The tag string.
     146 */
     147RTDECL(void *) RTMemTrackerHdrReallocDone(void *pvNew, size_t cbNewUser, void *pvOldUser, const char *pszTag);
     148
     149
     150/**
     151 * Do the accounting on free.
     152 *
     153 * @returns @a pv.
     154 * @param   pvUser              Pointer to the user data.
     155 * @param   cbUser              The size of the user data, 0 if not known.
     156 * @param   pszTag              The tag string.
    126157 * @param   enmMethod           The method that the user called.
    127158 */
    128 RTDECL(void *) RTMemTrackerHdrReallocDone(void *pvNew, size_t cbNew, void *pvOld, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
    129 
    130 
    131 /**
    132  * Do the accounting on free.
    133  *
    134  * @returns @a pv.
    135  * @param   pv                  Pointer to the user data.
    136  * @param   cb                  The size of the user data, 0 if not known.
    137  * @param   pszTag              The tag string.
    138  * @param   enmMethod           The method that the user called.
    139  */
    140 RTDECL(void *) RTMemTrackerHdrFree(void *pv, size_t cb, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
     159RTDECL(void *) RTMemTrackerHdrFree(void *pvUser, size_t cbUser, const char *pszTag, RTMEMTRACKERMETHOD enmMethod);
    141160
    142161
     
    149168 * Dumps all the allocations and tag statistics to the release log.
    150169 */
    151 RTDECL(void) RTMemTrackerDumpAllToRelLog(void);
     170RTDECL(void) RTMemTrackerDumpAllToLogRel(void);
    152171
    153172/**
     
    169188/**
    170189 * Dumps all the tag statistics to the log.
    171  */
    172 RTDECL(void) RTMemTrackerDumpStatsToLog(void);
     190 *
     191 * @param   fVerbose        Whether to print all the stats or just the ones
     192 *                          relevant to hunting leaks.
     193 */
     194RTDECL(void) RTMemTrackerDumpStatsToLog(bool fVerbose);
    173195
    174196/**
    175197 * Dumps all the tag statistics to the release log.
    176  */
    177 RTDECL(void) RTMemTrackerDumpStatsToRelLog(void);
     198 *
     199 * @param   fVerbose        Whether to print all the stats or just the ones
     200 *                          relevant to hunting leaks.
     201 */
     202RTDECL(void) RTMemTrackerDumpStatsToLogRel(bool fVerbose);
    178203
    179204/**
    180205 * Dumps all the tag statistics to standard out.
    181  */
    182 RTDECL(void) RTMemTrackerDumpStatsToStdOut(void);
     206 *
     207 * @param   fVerbose        Whether to print all the stats or just the ones
     208 *                          relevant to hunting leaks.
     209 */
     210RTDECL(void) RTMemTrackerDumpStatsToStdOut(bool fVerbose);
    183211
    184212/**
    185213 * Dumps all the tag statistics to standard err.
    186  */
    187 RTDECL(void) RTMemTrackerDumpStatsToStdErr(void);
     214 *
     215 * @param   fVerbose        Whether to print all the stats or just the ones
     216 *                          relevant to hunting leaks.
     217 */
     218RTDECL(void) RTMemTrackerDumpStatsToStdErr(bool fVerbose);
    188219
    189220/**
    190221 * Dumps all the tag statistics to the specified filename.
    191  */
    192 RTDECL(void) RTMemTrackerDumpStatsToFile(const char *pszFilename);
     222 *
     223 * @param   fVerbose        Whether to print all the stats or just the ones
     224 *                          relevant to hunting leaks.
     225 * @param   pszFilename         The name of the file to dump to.
     226 */
     227RTDECL(void) RTMemTrackerDumpStatsToFile(bool fVerbose, const char *pszFilename);
    193228
    194229
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette