windows-nt/Source/XPSP1/NT/base/fs/utils/ulib/inc/membmgr2.hxx
2020-09-26 16:20:57 +08:00

85 lines
2.1 KiB
C++

/*++
Copyright (c) 1999-2000 Microsoft Corporation
Module Name:
membmgr2.hxx
Abstract:
This module contains the declarations for the MEM_ALLOCATOR
class, which provides memory block of varialble size from
a bigger block. All bigger blocks are then linked together
thru a pointer at the end of each bigger block. This class
is particularly suitable to user who needs a lot of small
blocks but does not free any of them until there is no need
to use the object anymore.
Author:
Daniel Chan (danielch) Oct 18, 1999
--*/
#if !defined( _MEM_ALLOCATOR_DEFN_ )
#define _MEM_ALLOCATOR_DEFN_
//
// This class allocates a big buffer and then give a chunk of
// it away each time Allocate is called. Each big buffer
// is linked to the next one by having a pointer at the end
// of the big buffer. The last buffer should have a NULL
// pointer at the end of it.
//
class MEM_ALLOCATOR : public OBJECT {
public:
ULIB_EXPORT
DECLARE_CONSTRUCTOR( MEM_ALLOCATOR );
VIRTUAL
ULIB_EXPORT
~MEM_ALLOCATOR(
);
NONVIRTUAL
ULIB_EXPORT
BOOLEAN
Initialize(
IN ULONG64 MaximumMemoryToUse DEFAULT -1,
IN ULONG IncrementalBlockSize DEFAULT 1024*1024
);
NONVIRTUAL
ULIB_EXPORT
PVOID
Allocate(
IN ULONG SizeInBytes
);
private:
NONVIRTUAL
VOID
Construct(
);
NONVIRTUAL
VOID
Destroy(
);
PVOID _head_ptr; // points to the first big buffer
PVOID _next_free_ptr; // points to the free space of the current big buffer
ULONG _free_space_in_current_block; // amount of user space that's free in the
// current big buffer
ULONG _incremental_size; // how large is each big buffer
ULONG64 _max_mem_use;
ULONG64 _mem_use;
};
#endif