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.
92 lines
1.7 KiB
92 lines
1.7 KiB
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
//
|
|
// memory management stuff
|
|
//
|
|
// 22-Nov-1999 sburns (refactored)
|
|
//
|
|
// This file is #include'd from mem.cpp
|
|
// DO NOT include in the sources file list
|
|
//
|
|
// this is the retail version:
|
|
|
|
|
|
|
|
#ifdef DBG
|
|
#error This file must NOT be compiled with the DBG symbol defined
|
|
#endif
|
|
|
|
|
|
|
|
//
|
|
// Retail build only
|
|
//
|
|
|
|
|
|
|
|
void
|
|
Burnslib::Heap::Initialize()
|
|
{
|
|
// we do not make available instrumented heap in retail builds, so there
|
|
// is nothing to do here.
|
|
}
|
|
|
|
|
|
|
|
void*
|
|
Burnslib::Heap::OperatorNew(
|
|
size_t size,
|
|
const char* /* file */ ,
|
|
int /* line */ )
|
|
throw (std::bad_alloc)
|
|
{
|
|
void* ptr = 0;
|
|
|
|
for (;;)
|
|
{
|
|
// NOTE: if some other user of the CRT has used _set_new_mode or
|
|
// _CrtSetAllocHook, then they may circumvent our careful arrangement
|
|
// and hose us. The really sad part is that the only way to prevent
|
|
// that problem is for us to not use any CRT heap functions.
|
|
|
|
ptr = malloc(size);
|
|
|
|
if (ptr)
|
|
{
|
|
break;
|
|
}
|
|
|
|
// the allocation failed. Give the user the opportunity to try to
|
|
// free some, or throw an exception.
|
|
|
|
if (DoLowMemoryDialog() == IDRETRY)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
::OutputDebugString(RUNTIME_NAME);
|
|
::OutputDebugString(
|
|
L" Burnslib::Heap::OperatorNew: user opted to throw bad_alloc\n");
|
|
|
|
throw nomem;
|
|
}
|
|
|
|
return ptr;
|
|
}
|
|
|
|
|
|
|
|
void
|
|
Burnslib::Heap::OperatorDelete(void* ptr)
|
|
throw ()
|
|
{
|
|
free(ptr);
|
|
}
|
|
|
|
|
|
|
|
void
|
|
Burnslib::Heap::DumpMemoryLeaks()
|
|
{
|
|
// does nothing in the retail (free) build.
|
|
}
|
|
|