Open CASCADE Technology
7.5.0
|
#include <NCollection_IncAllocator.hxx>
Data Structures | |
struct | IBlock |
Public Types | |
typedef void * | aligned_t |
Public Types inherited from Standard_Transient | |
typedef void | base_type |
Returns a type descriptor about this object. More... | |
Public Member Functions | |
NCollection_IncAllocator (size_t theBlockSize=DefaultBlockSize) | |
Constructor. Note that this constructor does NOT setup mutex for using allocator concurrently from different threads, see SetThreadSafe() method. More... | |
void | SetThreadSafe (bool theIsThreadSafe=true) |
Setup mutex for thread-safe allocations. More... | |
virtual void * | Allocate (const size_t size) override |
Allocate memory with given size. Returns NULL on failure. More... | |
virtual void | Free (void *anAddress) override |
Free a previously allocated memory. Does nothing. More... | |
size_t | GetMemSize () const |
Diagnostic method, returns the total allocated size. More... | |
~NCollection_IncAllocator () | |
Destructor (calls Clean() internally) More... | |
void * | Reallocate (void *anAddress, const size_t oldSize, const size_t newSize) |
Reallocation: it is always allowed but is only efficient with the last allocated item. More... | |
void | Reset (const Standard_Boolean doReleaseMem=Standard_True) |
Re-initialize the allocator so that the next Allocate call should start allocating in the very begining as though the allocator is just constructed. Warning: make sure that all previously allocated data are no more used in your code! More... | |
Public Member Functions inherited from Standard_Transient | |
Standard_Transient () | |
Empty constructor. More... | |
Standard_Transient (const Standard_Transient &) | |
Copy constructor – does nothing. More... | |
Standard_Transient & | operator= (const Standard_Transient &) |
Assignment operator, needed to avoid copying reference counter. More... | |
virtual | ~Standard_Transient () |
Destructor must be virtual. More... | |
virtual void | Delete () const |
Memory deallocator for transient classes. More... | |
virtual const opencascade::handle< Standard_Type > & | DynamicType () const |
Returns a type descriptor about this object. More... | |
Standard_Boolean | IsInstance (const opencascade::handle< Standard_Type > &theType) const |
Returns a true value if this is an instance of Type. More... | |
Standard_Boolean | IsInstance (const Standard_CString theTypeName) const |
Returns a true value if this is an instance of TypeName. More... | |
Standard_Boolean | IsKind (const opencascade::handle< Standard_Type > &theType) const |
Returns true if this is an instance of Type or an instance of any class that inherits from Type. Note that multiple inheritance is not supported by OCCT RTTI mechanism. More... | |
Standard_Boolean | IsKind (const Standard_CString theTypeName) const |
Returns true if this is an instance of TypeName or an instance of any class that inherits from TypeName. Note that multiple inheritance is not supported by OCCT RTTI mechanism. More... | |
Standard_Transient * | This () const |
Returns non-const pointer to this object (like const_cast). For protection against creating handle to objects allocated in stack or call from constructor, it will raise exception Standard_ProgramError if reference counter is zero. More... | |
Standard_Integer | GetRefCount () const |
Get the reference counter of this object. More... | |
void | IncrementRefCounter () const |
Increments the reference counter of this object. More... | |
Standard_Integer | DecrementRefCounter () const |
Decrements the reference counter of this object; returns the decremented value. More... | |
Static Public Attributes | |
static const size_t | DefaultBlockSize = 24600 |
Protected Member Functions | |
void | Clean () |
Flush all previously allocated data. All pointers returned by Allocate() become invalid – be very careful with this. More... | |
void * | allocateNewBlock (const size_t cSize) |
Allocate a new block and return a pointer to it ** only for internal usage **. More... | |
Protected Member Functions inherited from NCollection_BaseAllocator | |
NCollection_BaseAllocator (void) | |
Constructor - prohibited. More... | |
Protected Attributes | |
Standard_Mutex * | myMutex |
IBlock * | myFirstBlock |
size_t | mySize |
size_t | myMemSize |
Additional Inherited Members | |
Static Public Member Functions inherited from NCollection_BaseAllocator | |
static const Handle< NCollection_BaseAllocator > & | CommonBaseAllocator (void) |
CommonBaseAllocator This method is designed to have the only one BaseAllocator (to avoid useless copying of collections). However one can use operator new to create more BaseAllocators, but it is injurious. More... | |
static void | StandardCallBack (const Standard_Boolean theIsAlloc, const Standard_Address theStorage, const Standard_Size theRoundSize, const Standard_Size theSize) |
Callback function to register alloc/free calls. More... | |
static void | PrintMemUsageStatistics () |
Prints memory usage statistics cumulated by StandardCallBack. More... | |
Static Public Member Functions inherited from Standard_Transient | |
static const char * | get_type_name () |
Returns a type descriptor about this object. More... | |
static const opencascade::handle< Standard_Type > & | get_type_descriptor () |
Returns type descriptor of Standard_Transient class. More... | |
Class NCollection_IncAllocator - incremental memory allocator. This class allocates memory on request returning the pointer to an allocated block. This memory is never returned to the system until the allocator is destroyed.
By comparison with the standard new() and malloc() calls, this method is faster and consumes very small additional memory to maintain the heap.
All pointers returned by Allocate() are aligned to the size of the data type "aligned_t". To modify the size of memory blocks requested from the OS, use the parameter of the constructor (measured in bytes); if this parameter is smaller than 25 bytes on 32bit or 49 bytes on 64bit, the block size will be the default 24 kbytes
Note that this allocator is most suitable for single-threaded algorithms (consider creating dedicated allocators per working thread), and thread-safety of allocations is DISABLED by default (see SetThreadSafe()).
typedef void* NCollection_IncAllocator::aligned_t |
NCollection_IncAllocator::NCollection_IncAllocator | ( | size_t | theBlockSize = DefaultBlockSize | ) |
Constructor. Note that this constructor does NOT setup mutex for using allocator concurrently from different threads, see SetThreadSafe() method.
NCollection_IncAllocator::~NCollection_IncAllocator | ( | ) |
Destructor (calls Clean() internally)
|
overridevirtual |
Allocate memory with given size. Returns NULL on failure.
Reimplemented from NCollection_BaseAllocator.
|
protected |
Allocate a new block and return a pointer to it ** only for internal usage **.
|
protected |
Flush all previously allocated data. All pointers returned by Allocate() become invalid – be very careful with this.
|
overridevirtual |
Free a previously allocated memory. Does nothing.
Reimplemented from NCollection_BaseAllocator.
size_t NCollection_IncAllocator::GetMemSize | ( | ) | const |
Diagnostic method, returns the total allocated size.
void* NCollection_IncAllocator::Reallocate | ( | void * | anAddress, |
const size_t | oldSize, | ||
const size_t | newSize | ||
) |
Reallocation: it is always allowed but is only efficient with the last allocated item.
void NCollection_IncAllocator::Reset | ( | const Standard_Boolean | doReleaseMem = Standard_True | ) |
Re-initialize the allocator so that the next Allocate call should start allocating in the very begining as though the allocator is just constructed. Warning: make sure that all previously allocated data are no more used in your code!
doReleaseMem | True - release all previously allocated memory, False - preserve it for future allocations. |
void NCollection_IncAllocator::SetThreadSafe | ( | bool | theIsThreadSafe = true | ) |
Setup mutex for thread-safe allocations.
|
static |
|
protected |
|
protected |
|
protected |
|
protected |