|
|
/*****************************************************************************
* * * MEM.H * * * * Copyright (C) Microsoft Corporation 1990. * * All Rights reserved. * * * ****************************************************************************** * * * Module Intent: Exports memory management functionality. * Most functions map directly to Window's * * memory manager calls. * ****************************************************************************** * * * Current Owner: RHobbs * * * *****************************************************************************/
#if defined( __cplusplus )
extern "C" { #endif
/*****************************************************************************
* * * Prototypes * * * *****************************************************************************/
HANDLE PASCAL FAR GhDupGh(HANDLE); HANDLE PASCAL FAR GhDupSz(LPSTR); VOID FAR PASCAL MakeGlobalPool (void); VOID FAR PASCAL FreeGlobalPool (void); HANDLE FAR PASCAL _VirtualAlloc(LPVOID, DWORD, DWORD, DWORD, LPSTR, UINT); LPVOID FAR PASCAL _VirtualLock(LPVOID, DWORD, LPSTR, UINT); BOOL FAR PASCAL _VirtualUnlock(LPVOID, DWORD, LPSTR, UINT); int FAR PASCAL _VirtualFree(LPVOID, DWORD, DWORD, LPSTR, UINT);
/*****************************************************************************
* * * Defines * * * *****************************************************************************/
#if defined(MOSMAP) && !defined(NOMOSMEM)
// Mos server can't be limited in the number of handles. However, sometimes
// debug layer is needed to track memory leaks. Simply comment out next line
// or compile with NOMOSMEM
#define MOSMEM
#endif
#ifndef _MAC
#define DLLGMEM_ZEROINIT (GMEM_MOVEABLE | GMEM_ZEROINIT)
#else
#define DLLGMEM_ZEROINIT (GMEM_MOVEABLE | GMEM_SHARE | GMEM_ZEROINIT | GMEM_PMODELOCKSTRATEGY)
#endif
#define _LOCALALLOC LocalAlloc
#define _LOCALLOCK LocalLock
#define _LOCALUNLOCK LocalUnlock
#define _LOCALFREE LocalFree
#if defined(_DEBUG) && !defined(_MSDN) && !defined(MOSMEM)
#include <windowsx.h>
HANDLE FAR PASCAL _GlobalAlloc(UINT, DWORD, LPSTR, UINT); LPVOID FAR PASCAL _GlobalLock(HANDLE, LPSTR, UINT); BOOL FAR PASCAL _GlobalUnlock(HANDLE, LPSTR, UINT); HANDLE FAR PASCAL _GlobalFree(HANDLE, LPSTR, UINT); HANDLE FAR PASCAL _GlobalReAlloc(HANDLE, DWORD, UINT, LPSTR, UINT); HANDLE FAR PASCAL _GlobalRelease(HANDLE, LPSTR, UINT); HANDLE FAR PASCAL _GlobalAdd(HANDLE, LPSTR, UINT); DWORD FAR PASCAL _GlobalSize(HANDLE, LPSTR, UINT);
#define _GLOBALALLOC(a,b) _GlobalAlloc(a,b,s_aszModule,__LINE__)
#define _GLOBALLOCK(a) _GlobalLock(a,s_aszModule, __LINE__)
#define _GLOBALSIZE(a) _GlobalSize(a,s_aszModule, __LINE__)
#define _GLOBALUNLOCK(a) _GlobalUnlock(a,s_aszModule, __LINE__)
#define _GLOBALFREE(a) _GlobalFree(a,s_aszModule, __LINE__)
#define _GLOBALREALLOC(a,b,c) _GlobalReAlloc(a,b,c,s_aszModule, __LINE__)
#define _GLOBALRELEASE(a) _GlobalRelease(a, s_aszModule, __LINE__)
#define _GLOBALADD(a) _GlobalAdd(a, s_aszModule, __LINE__)
#define _GLOBALALLOCPTR(a,b) (_GLOBALLOCK(_GLOBALALLOC(a,b)))
#define _GLOBALFREEPTR(a) (_GLOBALUNLOCK(GlobalPtrHandle((LPVOID)a)), \
_GLOBALFREE(GlobalPtrHandle((LPVOID)a)))
#define _VIRTUALALLOC(a,b,c,d) _VirtualAlloc(a,b,c,d,s_aszModule,__LINE__)
#define _VIRTUALLOCK(a,b) _VirtualLock(a,b,s_aszModule, __LINE__)
#define _VIRTUALUNLOCK(a,b) _VirtualUnlock(a,b,s_aszModule, __LINE__)
#define _VIRTUALFREE(a,b,c) _VirtualFree(a,b,c,s_aszModule, __LINE__)
DWORD PASCAL FAR CheckMem(VOID); DWORD PASCAL FAR GetMemUsed(VOID);
#else
#if defined( MOSMEM ) // {
// We can't afford to have memory overhead on the server.... => no debug, no moveable
#define _GLOBALALLOC(a,b) GlobalAlloc((a)&~GMEM_MOVEABLE,b)
#define _GLOBALREALLOC(a,b,c) GlobalReAlloc(a,b,((c)&~GMEM_MODIFY)|GMEM_MOVEABLE)
#define _GLOBALALLOCPTR(a,b) (_GLOBALALLOC(a,b))
#else // }{
#define _GLOBALALLOC GlobalAlloc
#define _GLOBALREALLOC GlobalReAlloc
#define _GLOBALALLOCPTR GlobalAllocPtr
#endif // }
#define _GLOBALLOCK (VOID FAR *)GlobalLock
#define _GLOBALUNLOCK GlobalUnlock
#define _GLOBALFREE GlobalFree
#define _GLOBALSIZE GlobalSize
#define _GLOBALRELEASE(a) (a)
#define _GLOBALADD(a) (a)
#define _GLOBALFREEPTR GlobalFreePtr
#define _VIRTUALALLOC(a,b,c,d) VirtualAlloc(a,b,c,d)
#define _VIRTUALLOCK(a,b) VirtualLock(a,b)
#define _VIRTUALUNLOCK(a,b) VirtualUnlock(a,b)
#define _VIRTUALFREE(a,b,c) VirtualFree(a,b,c)
#endif // _DEBUG
#define FCheckGh( gh ) TRUE
#define LhFromP(pv) LocalHandle( (WORD)(pv) )
// Flags to be use to control block manager allocation
#define THREADED_ELEMENT 1
#ifdef _MAC
#define USE_VIRTUAL_MEMORY 0
#else
#define USE_VIRTUAL_MEMORY 0
#endif
#if defined( __cplusplus )
} #endif
|