Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

113 lines
3.0 KiB

/*++=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Copyright (c) 1999 Microsoft Corporation
Module Name:
mem.cpp
Abstract:
Replacements for operators new & delete.
Routines implemented in this module:
_InitMem()
operator new
operator delete
These routines delegate to HeapAlloc/HeapFree, and party on the process
heap. This helps overcome the problem of using general-purpose allocation
functions as well as using new/delete to deal with C++ objects.
Rudimentary allocation tracking is enabled in debug builds that
allows us to see (via the last line in the log file) how much memory
went unallocated at process termination. This doesn't take into account
kernel, gdi, or user objects.
Memory deallocation routines are "safe" in the sense that you can pass
NULL pointers (invalid pointers aren't detected).
Author:
Paul M Midgen (pmidge) 01-June-2000
Revision History:
01-June-2000 pmidge
Created
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--*/
#include "common.h"
//#include "mem.h"
HANDLE g_hProcessHeap = NULL;
/*++=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
_InitMem()
WHAT : Sets the global process heap handle call this before any
allocations occur or you'll fault. Pretty simple.
ARGS : none.
RETURNS : nothing
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--*/
void _InitMem(void)
{
g_hProcessHeap = GetProcessHeap();
}
/*++=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
operator new
WHAT : Replaces the global operator new. Same usage semantics. Allocates
objects, makes implicit calls to their constructors.
ARGS : size - size in bytes of the object to be allocated. the compiler
pushes this argument on the stack automagically.
RETURNS : void pointer to allocated memory.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--*/
void* __cdecl operator new(size_t size)
{
void* pv = NULL;
if( !g_hProcessHeap )
_InitMem();
pv = HeapAlloc(g_hProcessHeap, HEAP_ZERO_MEMORY, size);
DEBUG_ALLOC(pv);
return pv;
}
/*++=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
operator delete
WHAT : Replaces the global operator delete. Same usage semantics. Deletes
objects, makes implicit call to their destructors.
ARGS : pv - pointer to object to be freed. same compiler magic as with
operator new.
RETURNS : nothing.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--*/
void __cdecl operator delete(void* pv)
{
if( !g_hProcessHeap )
_InitMem();
if( pv )
{
DEBUG_FREE(pv);
HeapFree(g_hProcessHeap, 0, pv);
}
}