00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef _VPR_MemPoolSGI_h_
00043 #define _VPR_MemPoolSGI_h_
00044
00045 #include <vpr/vprConfig.h>
00046 #include <iostream>
00047 #include <unistd.h>
00048 #include <ulocks.h>
00049
00050
00051
00052
00053
00054
00055 namespace vpr
00056 {
00057
00076 class MemPoolSGI : public MemPool
00077 {
00078 public:
00079 MemPoolSGI(size_t initialSize = 65536, int numProcs = 8,
00080 char* staticTempName = "/var/tmp/memPoolSGIXXXXXX");
00081
00082 virtual ~MemPoolSGI()
00083 {
00084 usdetach(arena);
00085 unlink(arenaFileName);
00086 std::cerr << "\nUnlinking: " << arenaFileName << std::endl;
00087 }
00088
00089 public:
00090 virtual void* allocate(size_t size)
00091 {
00092 void* retval;
00093 retval = usmalloc(size, arena);
00094
00095 if ( retval == NULL )
00096 {
00097 std::cerr << "MemPoolSGI: Out of memory!!!" << std::endl;
00098 }
00099
00100 return retval;
00101 }
00102
00103 virtual void deallocate(void* ptr)
00104 {
00105 usfree(ptr, arena);
00106 }
00107
00108 virtual void* reallocate(void *ptr, size_t new_sz)
00109 {
00110 return usrealloc(ptr, new_sz, arena);
00111 }
00112
00113 public:
00118 usptr_t* getArena()
00119 {
00120 return arena;
00121 }
00122
00123 public:
00130 static void init(size_t initialSize = 32768, int numProcs = 64,
00131 char* staticTempName = "/var/tmp/memPoolsArenaXXXXXX");
00132
00133 void* operator new(size_t sz)
00134 {
00135 std::cerr << "MemPoolSGI::new called. sz:" << sz << "\n";
00136 if ( arenaForMemPools == NULL )
00137 {
00138 init();
00139 }
00140
00141 return usmalloc(sizeof(MemPoolSGI), arenaForMemPools);
00142 }
00143
00144 void operator delete(void* ptr)
00145 {
00146 usfree(ptr, arenaForMemPools);
00147 }
00148
00149 private:
00150 usptr_t* arena;
00151 char* arenaFileName;
00152
00153 private:
00154 static usptr_t* arenaForMemPools;
00155 static char* arenaForMemPoolsFileName;
00156 };
00157
00158 }
00159
00160
00161 #endif