85 lines
2.1 KiB
C++
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
|