47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
|
#pragma once
|
||
|
|
||
|
// ith/common/memory.h
|
||
|
// 8/23/2013 jichi
|
||
|
// Branch: ITH/mem.h, revision 66
|
||
|
|
||
|
#ifndef ITH_HAS_HEAP
|
||
|
# define ITH_MEMSET_HEAP(...) ::memset(__VA_ARGS__)
|
||
|
#else
|
||
|
# define ITH_MEMSET_HEAP(...) (void)0
|
||
|
|
||
|
// Defined in kernel32.lilb
|
||
|
extern "C" {
|
||
|
// PVOID RtlAllocateHeap( _In_ PVOID HeapHandle, _In_opt_ ULONG Flags, _In_ SIZE_T Size);
|
||
|
__declspec(dllimport) void * __stdcall RtlAllocateHeap(void *HeapHandle, unsigned long Flags, unsigned long Size);
|
||
|
|
||
|
// BOOLEAN RtlFreeHeap( _In_ PVOID HeapHandle, _In_opt_ ULONG Flags, _In_ PVOID HeapBase);
|
||
|
__declspec(dllimport) int __stdcall RtlFreeHeap(void *HeapHandle, unsigned long Flags, void *HeapBase);
|
||
|
} // extern "C"
|
||
|
|
||
|
//NTSYSAPI
|
||
|
//BOOL
|
||
|
//NTAPI
|
||
|
//RtlFreeHeap(
|
||
|
// _In_ HANDLE hHeap,
|
||
|
// _In_ DWORD dwFlags,
|
||
|
// _In_ LPVOID lpMem
|
||
|
//);
|
||
|
|
||
|
extern void *hHeap; // defined in ith/sys.cc
|
||
|
|
||
|
inline void * __cdecl operator new(size_t lSize)
|
||
|
{
|
||
|
// http://msdn.microsoft.com/en-us/library/windows/desktop/aa366597%28v=vs.85%29.aspx
|
||
|
// HEAP_ZERO_MEMORY flag is critical. All new objects are assumed with zero initialized.
|
||
|
enum { HEAP_ZERO_MEMORY = 0x00000008 };
|
||
|
return RtlAllocateHeap(::hHeap, HEAP_ZERO_MEMORY, lSize);
|
||
|
}
|
||
|
|
||
|
inline void __cdecl operator delete(void *pBlock)
|
||
|
{ RtlFreeHeap(::hHeap, 0, pBlock); }
|
||
|
|
||
|
inline void __cdecl operator delete[](void *pBlock)
|
||
|
{ RtlFreeHeap(::hHeap, 0, pBlock); }
|
||
|
|
||
|
#endif // ITH_HAS_HEAP
|