00001 /* 00002 * This file is part of openMask © INRIA, CNRS, Universite de Rennes 1 1993-2002, thereinafter the Software 00003 * 00004 * The Software has been developped within the Siames Project. 00005 * INRIA, the University of Rennes 1 and CNRS jointly hold intellectual property rights 00006 * 00007 * The Software has been registered with the Agence pour la Protection des 00008 * Programmes (APP) under registration number IDDN.FR.001.510008.00.S.P.2001.000.41200 00009 * 00010 * This file may be distributed under the terms of the Q Public License 00011 * version 1.0 as defined by Trolltech AS of Norway and appearing in the file 00012 * LICENSE.QPL included in the packaging of this file. 00013 * 00014 * Licensees holding valid specific licenses issued by INRIA, CNRS or Université de Rennes 1 00015 * for the software may use this file in accordance with that specific license 00016 * 00017 */ 00018 #include "PsnSharedArrayMemoryManager.h" 00019 #include "PsnMemoryElementDescriptor.h" 00020 #include "PsnRelaxedMemoryManager.h" 00021 00022 PsnSharedArrayMemoryManager::PsnSharedArrayMemoryManager(size_t sizeDsm, size_t pageSize, size_t alignedSize, PsnRelaxedMemoryManager & memoryManager, int queueSize) : 00023 PsnFramedMemoryManager(sizeDsm * queueSize, 00024 pageSize, 00025 alignedSize, 00026 memoryManager, 00027 queueSize), 00028 _stepSize(sizeDsm) 00029 { 00030 _freeMem = new PsnMemoryElementDescriptor() ; 00031 _freeMem->base = 0 ; 00032 _freeMem->next = (unsigned int) NULL ; 00033 _freeMem->size = _blockSize ; 00034 00035 //here, we place a little shortcut for easy allocation and deallocation : we suppose a PsnSharedArrayMemoryManager has a _blockSize comprised of very little pages (often 1) and that allocation in these pages takes place immediatly after creation. 00036 for (int i = _queueSize - 1 ; i >= 0 ; i-- ) {//in reverse order because of the underlying set 00037 addBlockInSync( i ); 00038 } 00039 } 00040 00041 PsnSharedArrayMemoryManager::~PsnSharedArrayMemoryManager() { 00042 assert (_freeMem->size == _blockSize ) ; 00043 delete _freeMem ; 00044 } 00045 00046 void * PsnSharedArrayMemoryManager::mmalloc( size_t size ) { 00047 #ifdef _DEBUGALLOCATIONMOME 00048 cerr<<"PsnSharedArrayMemoryManager::mmalloc "<<size<<" "<<& _freeMem<<" "; 00049 #endif 00050 void * resul = getFromThisFree( & _freeMem , size) ; 00051 #ifdef _DEBUGALLOCATIONMOME 00052 cerr<<resul<<endl;; 00053 #endif 00054 if (resul != NULL) _sizeLeft -= size ; 00055 return resul ; 00056 } 00057 00058 void PsnSharedArrayMemoryManager::mfree ( void * ptr, size_t size ) { 00059 addInThisFree ( & _freeMem , globalAddressToLocal(ptr), size ) ; 00060 _sizeLeft += size ; 00061 } 00062 00063 00064 size_t PsnSharedArrayMemoryManager::getStepSize() { 00065 return _stepSize ; 00066 } 00067
| Documentation generated on Mon Nov 25 15:25:01 2002 |
Generated with doxygen 1.2.12 by Dimitri van Heesch , 1997-2001 |