1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-29 14:00:49 +03:00

0025261: NCollection, set of improvements

The following improvements were implemented:
* two additional allocators were introduced
  * Allocator which used WinHeap
  * Accumulating memory allocator
* Access to Allocators in lists are provided
* Access optimization in data map (seek and find functions returning reference or pointer to value in one shot)

Warning fixed
This commit is contained in:
pdn
2014-10-02 16:00:36 +04:00
committed by bugmaster
parent 848fa7e315
commit 9df7f42944
7 changed files with 601 additions and 51 deletions

View File

@@ -0,0 +1,58 @@
// File: NCollection_WinHeapAllocator.hxx
// Created: 22.07.11
// Author: Kirill GAVRILOV
// Copyright: Open Cascade 2011
#ifndef NCollection_WinHeapAllocator_HeaderFile
#define NCollection_WinHeapAllocator_HeaderFile
#include <NCollection_BaseAllocator.hxx>
//! This memory allocator creates dedicated heap for allocations.
//! This technics available only on Windows platform
//! (no alternative on Unix systems).
//! It may be used to take control over memory fragmentation
//! because on destruction ALL allocated memory will be released
//! to the system.
//!
//! This allocator can also be created per each working thread
//! hovewer it real multi-threading performance is dubious.
//!
//! Notice that this also means that existing pointers will be broken
//! and you shoould control that allocator is alive along all objects
//! allocated with him.
class NCollection_WinHeapAllocator : public NCollection_BaseAllocator
{
public:
//! Main constructor
Standard_EXPORT NCollection_WinHeapAllocator (const size_t theInitSizeBytes = 0x80000);
//! Destructor
Standard_EXPORT virtual ~NCollection_WinHeapAllocator();
//! Allocate memory
Standard_EXPORT virtual void* Allocate (const Standard_Size theSize);
//! Release memory
Standard_EXPORT virtual void Free (void* theAddress);
// Declaration of CASCADE RTTI
DEFINE_STANDARD_RTTI(NCollection_WinHeapAllocator)
private:
//! Copy constructor - prohibited
NCollection_WinHeapAllocator (const NCollection_WinHeapAllocator& );
private:
#if(defined(_WIN32) || defined(__WIN32__))
void* myHeapH;
#endif
Standard_Boolean myToZeroMemory;
};
// Definition of HANDLE object using Standard_DefineHandle.hxx
DEFINE_STANDARD_HANDLE (NCollection_WinHeapAllocator, NCollection_BaseAllocator)
#endif //NCollection_WinHeapAllocator_HeaderFile