Open CASCADE Technology  7.5.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes
Standard_MMgrOpt Class Reference

Open CASCADE memory manager optimized for speed. More...

#include <Standard_MMgrOpt.hxx>

Inheritance diagram for Standard_MMgrOpt:
Inheritance graph
[legend]

Public Types

typedef void(* TPCallBackFunc) (const Standard_Boolean theIsAlloc, const Standard_Address theStorage, const Standard_Size theRoundSize, const Standard_Size theSize)
 Declaration of a type pointer to the callback function that should accept the following arguments: More...
 

Public Member Functions

 Standard_MMgrOpt (const Standard_Boolean aClear=Standard_True, const Standard_Boolean aMMap=Standard_True, const Standard_Size aCellSize=200, const Standard_Integer aNbPages=10000, const Standard_Size aThreshold=40000)
 Constructor. If aClear is True, the allocated emmory will be nullified. For description of other parameters, see description of the class above. More...
 
virtual ~Standard_MMgrOpt ()
 Frees all free lists and pools allocated for small blocks. More...
 
virtual Standard_Address Allocate (const Standard_Size aSize)
 Allocate aSize bytes; see class description above. More...
 
virtual Standard_Address Reallocate (Standard_Address thePtr, const Standard_Size theSize)
 Reallocate previously allocated aPtr to a new size; new address is returned. In case that aPtr is null, the function behaves exactly as Allocate. More...
 
virtual void Free (Standard_Address thePtr)
 Free previously allocated block. Note that block can not all blocks are released to the OS by this method (see class description) More...
 
virtual Standard_Integer Purge (Standard_Boolean isDestroyed)
 Release medium-sized blocks of memory in free lists to the system. Returns number of actually freed blocks. More...
 
- Public Member Functions inherited from Standard_MMgrRoot
virtual ~Standard_MMgrRoot ()
 Virtual destructor; required for correct inheritance. More...
 

Static Public Member Functions

static void SetCallBackFunction (TPCallBackFunc pFunc)
 Set the callback function. You may pass 0 there to turn off the callback. The callback function, if set, will be automatically called from within Allocate and Free methods. More...
 

Protected Member Functions

void Initialize ()
 Internal - initialization of buffers. More...
 
Standard_SizeAllocMemory (Standard_Size &aSize)
 Internal - allocation of memory using either malloc or memory mapped files. The size of the actually allocated block may be greater than requested one when memory mapping is used, since it is aligned to page size. More...
 
void FreeMemory (Standard_Address aPtr, const Standard_Size aSize)
 Internal - deallocation of memory taken by AllocMemory. More...
 
void FreePools ()
 Internal - free memory pools allocated for small size blocks. More...
 

Protected Attributes

Standard_Boolean myClear
 option to clear allocated memory More...
 
Standard_Size myFreeListMax
 last allocated index in the free blocks list More...
 
Standard_Size ** myFreeList
 free blocks list More...
 
Standard_Size myCellSize
 small blocks size More...
 
Standard_Integer myNbPages
 size (pages) for small block memory pools More...
 
Standard_Size myPageSize
 system-dependent memory page size More...
 
Standard_SizemyAllocList
 list of memory pools for small blocks More...
 
Standard_SizemyNextAddr
 next free address in the active memory pool More...
 
Standard_SizemyEndBlock
 end of the active memory pool More...
 
Standard_Integer myMMap
 non-null if using memory mapped files for allocation of large blocks More...
 
Standard_Size myThreshold
 large block size More...
 
Standard_Mutex myMutex
 Mutex to protect free lists data. More...
 
Standard_Mutex myMutexPools
 Mutex to protect small block pools data. More...
 

Detailed Description

Open CASCADE memory manager optimized for speed.

The behaviour is different for memory blocks of different sizes, according to specified options provided to constructor:

Thus the optimization of memory allocation/deallocation is reached for small and medium size blocks using free lists method; note that space allocated for small blocks cannot be (currently) released to the system while space for medium size blocks can be released by method Purge().

Note that destructor of that class frees all free lists and memory pools allocated for small blocks.

Note that size of memory blocks allocated by this memory manager is always rounded up to 16 bytes. In addition, 8 bytes are added at the beginning of the memory block to hold auxiliary information (size of the block when in use, or pointer to the next free block when in free list). This the expense of speed optimization. At the same time, allocating small blocks is usually less costly than directly by malloc since allocation is made once (when allocating a pool) and overheads induced by malloc are minimized.

Member Typedef Documentation

◆ TPCallBackFunc

typedef void(* Standard_MMgrOpt::TPCallBackFunc) (const Standard_Boolean theIsAlloc, const Standard_Address theStorage, const Standard_Size theRoundSize, const Standard_Size theSize)

Declaration of a type pointer to the callback function that should accept the following arguments:

Parameters
theIsAlloctrue if the data is allocated, false if it is freed
theStorageaddress of the allocated/freed block
theRoundSizethe real rounded size of the block
theSizethe size of the block that was requested by application (this value is correct only if theIsAlloc is true)

Constructor & Destructor Documentation

◆ Standard_MMgrOpt()

Standard_MMgrOpt::Standard_MMgrOpt ( const Standard_Boolean  aClear = Standard_True,
const Standard_Boolean  aMMap = Standard_True,
const Standard_Size  aCellSize = 200,
const Standard_Integer  aNbPages = 10000,
const Standard_Size  aThreshold = 40000 
)

Constructor. If aClear is True, the allocated emmory will be nullified. For description of other parameters, see description of the class above.

◆ ~Standard_MMgrOpt()

virtual Standard_MMgrOpt::~Standard_MMgrOpt ( )
virtual

Frees all free lists and pools allocated for small blocks.

Member Function Documentation

◆ Allocate()

virtual Standard_Address Standard_MMgrOpt::Allocate ( const Standard_Size  aSize)
virtual

Allocate aSize bytes; see class description above.

Implements Standard_MMgrRoot.

◆ AllocMemory()

Standard_Size* Standard_MMgrOpt::AllocMemory ( Standard_Size aSize)
protected

Internal - allocation of memory using either malloc or memory mapped files. The size of the actually allocated block may be greater than requested one when memory mapping is used, since it is aligned to page size.

◆ Free()

virtual void Standard_MMgrOpt::Free ( Standard_Address  thePtr)
virtual

Free previously allocated block. Note that block can not all blocks are released to the OS by this method (see class description)

Implements Standard_MMgrRoot.

◆ FreeMemory()

void Standard_MMgrOpt::FreeMemory ( Standard_Address  aPtr,
const Standard_Size  aSize 
)
protected

Internal - deallocation of memory taken by AllocMemory.

◆ FreePools()

void Standard_MMgrOpt::FreePools ( )
protected

Internal - free memory pools allocated for small size blocks.

◆ Initialize()

void Standard_MMgrOpt::Initialize ( )
protected

Internal - initialization of buffers.

◆ Purge()

virtual Standard_Integer Standard_MMgrOpt::Purge ( Standard_Boolean  isDestroyed)
virtual

Release medium-sized blocks of memory in free lists to the system. Returns number of actually freed blocks.

Reimplemented from Standard_MMgrRoot.

◆ Reallocate()

virtual Standard_Address Standard_MMgrOpt::Reallocate ( Standard_Address  thePtr,
const Standard_Size  theSize 
)
virtual

Reallocate previously allocated aPtr to a new size; new address is returned. In case that aPtr is null, the function behaves exactly as Allocate.

Implements Standard_MMgrRoot.

◆ SetCallBackFunction()

static void Standard_MMgrOpt::SetCallBackFunction ( TPCallBackFunc  pFunc)
static

Set the callback function. You may pass 0 there to turn off the callback. The callback function, if set, will be automatically called from within Allocate and Free methods.

Field Documentation

◆ myAllocList

Standard_Size* Standard_MMgrOpt::myAllocList
protected

list of memory pools for small blocks

◆ myCellSize

Standard_Size Standard_MMgrOpt::myCellSize
protected

small blocks size

◆ myClear

Standard_Boolean Standard_MMgrOpt::myClear
protected

option to clear allocated memory

◆ myEndBlock

Standard_Size* Standard_MMgrOpt::myEndBlock
protected

end of the active memory pool

◆ myFreeList

Standard_Size** Standard_MMgrOpt::myFreeList
protected

free blocks list

◆ myFreeListMax

Standard_Size Standard_MMgrOpt::myFreeListMax
protected

last allocated index in the free blocks list

◆ myMMap

Standard_Integer Standard_MMgrOpt::myMMap
protected

non-null if using memory mapped files for allocation of large blocks

◆ myMutex

Standard_Mutex Standard_MMgrOpt::myMutex
protected

Mutex to protect free lists data.

◆ myMutexPools

Standard_Mutex Standard_MMgrOpt::myMutexPools
protected

Mutex to protect small block pools data.

◆ myNbPages

Standard_Integer Standard_MMgrOpt::myNbPages
protected

size (pages) for small block memory pools

◆ myNextAddr

Standard_Size* Standard_MMgrOpt::myNextAddr
protected

next free address in the active memory pool

◆ myPageSize

Standard_Size Standard_MMgrOpt::myPageSize
protected

system-dependent memory page size

◆ myThreshold

Standard_Size Standard_MMgrOpt::myThreshold
protected

large block size


The documentation for this class was generated from the following file: