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