00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef OSX
00016 #include "malloc.h"
00017 #endif
00018
00019 #ifdef MEMOPTIMIZE
00021 map<size_t,deque<void*> > __stored;
00022 map<void*,size_t> __stored_size;
00023 #endif
00024
00025 void* operator new(size_t size) {
00026 #if !defined(SSE2) || defined(OSX)
00027 void *p=malloc(size);
00028 #else
00029 void *p=memalign(64,size);
00030 #endif
00031 return p;
00032 }
00033
00034 void operator delete (void* pointer) {
00035 free(pointer);
00036 }
00037
00038 void* operator new[] (size_t size) {
00039 #if !defined(SSE2) || defined(OSX)
00040 void* p;
00041 #ifdef MEMOPTIMIZE
00042 map<size_t,deque<void*> >::iterator q=__stored.find(size);
00043 if(q!=__stored.end() && q->second.size()) {p=q->second[0]; q->second.pop_front(); } else
00044 #endif
00045 p=malloc(size);
00046 #else
00047 p=memalign(64,size);
00048 #endif
00049 #ifdef MEMOPTIMIZE
00050 __stored_size[p]=size;
00051 #endif
00052 return p;
00053 }
00054
00055 void operator delete[] (void* pointer) {
00056 #ifdef MEMOPTIMIZE
00057 __stored[__stored_size[pointer]].push_back(pointer);
00058 #else
00059 free(pointer);
00060 #endif
00061 }
00062