windows-nt/Source/XPSP1/NT/net/config/inc/ncmem.h

118 lines
2.1 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: N C M E M . H
//
// Contents: Common memory management routines.
//
// Notes:
//
// Author: shaunco 24 Mar 1997
//
//----------------------------------------------------------------------------
#pragma once
#ifndef _NCMEM_H_
#define _NCMEM_H_
#include <malloc.h>
VOID*
MemAlloc (
size_t cb);
VOID*
MemAllocRaiseException (
size_t cb);
VOID
MemFree (
VOID* pv);
// A simple wrapper around malloc that returns E_OUTOFMEMORY if the
// allocation fails. Avoids having to explicitly do this at each
// call site of malloc.
//
HRESULT
HrMalloc (
size_t cb,
PVOID* ppv);
// This CANNOT be an inline function. If it is ever not inlined,
// the memory allocated will be destroyed. (We're dealing with the stack
// here.)
//
#define PvAllocOnStack(_st) _alloca(_st)
// Define a structure so that we can overload operator new with a
// signature specific to our purpose.
//
struct raiseexception_t {};
extern const raiseexception_t raiseexception;
VOID*
__cdecl
operator new (
size_t cb,
const raiseexception_t&
);
// Define a structure so that we can overload operator new with a
// signature specific to our purpose.
//
struct extrabytes_t {};
extern const extrabytes_t extrabytes;
VOID*
__cdecl
operator new (
size_t cb,
const extrabytes_t&,
size_t cbExtra);
#ifdef USE_HEAP_ALLOC
inline
void * Nccalloc(size_t n, size_t s)
{
return HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, (n * s));
}
inline
void Ncfree(void * p)
{
HeapFree (GetProcessHeap(), 0, p);
}
inline
void * Ncmalloc(size_t n)
{
return HeapAlloc (GetProcessHeap(), 0, n);
}
inline
void * Ncrealloc(void * p, size_t n)
{
return (NULL == p)
? HeapAlloc (GetProcessHeap(), 0, n)
: HeapReAlloc (GetProcessHeap(), 0, p, n);
}
#define calloc Nccalloc
#define free Ncfree
#define malloc Ncmalloc
#define realloc Ncrealloc
#endif // USE_HEAP_ALLOC
#endif // _NCMEM_H_