Mercurial > vba-clojure
annotate src/win32/7zip/7z/CPP/Common/NewHandler.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
rev | line source |
---|---|
rlm@1 | 1 // NewHandler.cpp |
rlm@1 | 2 |
rlm@1 | 3 #include "StdAfx.h" |
rlm@1 | 4 |
rlm@1 | 5 #include <stdlib.h> |
rlm@1 | 6 |
rlm@1 | 7 #include "NewHandler.h" |
rlm@1 | 8 |
rlm@1 | 9 // #define DEBUG_MEMORY_LEAK |
rlm@1 | 10 |
rlm@1 | 11 #ifndef DEBUG_MEMORY_LEAK |
rlm@1 | 12 |
rlm@1 | 13 #ifdef _WIN32 |
rlm@1 | 14 void * |
rlm@1 | 15 #ifdef _MSC_VER |
rlm@1 | 16 __cdecl |
rlm@1 | 17 #endif |
rlm@1 | 18 operator new(size_t size) |
rlm@1 | 19 { |
rlm@1 | 20 // void *p = ::HeapAlloc(::GetProcessHeap(), 0, size); |
rlm@1 | 21 void *p = ::malloc(size); |
rlm@1 | 22 if (p == 0) |
rlm@1 | 23 throw CNewException(); |
rlm@1 | 24 return p; |
rlm@1 | 25 } |
rlm@1 | 26 |
rlm@1 | 27 void |
rlm@1 | 28 #ifdef _MSC_VER |
rlm@1 | 29 __cdecl |
rlm@1 | 30 #endif |
rlm@1 | 31 operator delete(void *p) throw() |
rlm@1 | 32 { |
rlm@1 | 33 /* |
rlm@1 | 34 if (p == 0) |
rlm@1 | 35 return; |
rlm@1 | 36 ::HeapFree(::GetProcessHeap(), 0, p); |
rlm@1 | 37 */ |
rlm@1 | 38 ::free(p); |
rlm@1 | 39 } |
rlm@1 | 40 #endif |
rlm@1 | 41 |
rlm@1 | 42 #else |
rlm@1 | 43 |
rlm@1 | 44 #pragma init_seg(lib) |
rlm@1 | 45 const int kDebugSize = 1000000; |
rlm@1 | 46 static void *a[kDebugSize]; |
rlm@1 | 47 static int index = 0; |
rlm@1 | 48 |
rlm@1 | 49 static int numAllocs = 0; |
rlm@1 | 50 void * __cdecl operator new(size_t size) |
rlm@1 | 51 { |
rlm@1 | 52 numAllocs++; |
rlm@1 | 53 void *p = HeapAlloc(GetProcessHeap(), 0, size); |
rlm@1 | 54 if (index == 40) |
rlm@1 | 55 { |
rlm@1 | 56 int t = 1; |
rlm@1 | 57 } |
rlm@1 | 58 if (index < kDebugSize) |
rlm@1 | 59 { |
rlm@1 | 60 a[index] = p; |
rlm@1 | 61 index++; |
rlm@1 | 62 } |
rlm@1 | 63 if (p == 0) |
rlm@1 | 64 throw CNewException(); |
rlm@1 | 65 printf("Alloc %6d, size = %8d\n", numAllocs, size); |
rlm@1 | 66 return p; |
rlm@1 | 67 } |
rlm@1 | 68 |
rlm@1 | 69 class CC |
rlm@1 | 70 { |
rlm@1 | 71 public: |
rlm@1 | 72 CC() |
rlm@1 | 73 { |
rlm@1 | 74 for (int i = 0; i < kDebugSize; i++) |
rlm@1 | 75 a[i] = 0; |
rlm@1 | 76 } |
rlm@1 | 77 ~CC() |
rlm@1 | 78 { |
rlm@1 | 79 for (int i = 0; i < kDebugSize; i++) |
rlm@1 | 80 if (a[i] != 0) |
rlm@1 | 81 return; |
rlm@1 | 82 } |
rlm@1 | 83 } g_CC; |
rlm@1 | 84 |
rlm@1 | 85 |
rlm@1 | 86 void __cdecl operator delete(void *p) |
rlm@1 | 87 { |
rlm@1 | 88 if (p == 0) |
rlm@1 | 89 return; |
rlm@1 | 90 /* |
rlm@1 | 91 for (int i = 0; i < index; i++) |
rlm@1 | 92 if (a[i] == p) |
rlm@1 | 93 a[i] = 0; |
rlm@1 | 94 */ |
rlm@1 | 95 HeapFree(GetProcessHeap(), 0, p); |
rlm@1 | 96 numAllocs--; |
rlm@1 | 97 printf("Free %d\n", numAllocs); |
rlm@1 | 98 } |
rlm@1 | 99 |
rlm@1 | 100 #endif |
rlm@1 | 101 |
rlm@1 | 102 /* |
rlm@1 | 103 int MemErrorVC(size_t) |
rlm@1 | 104 { |
rlm@1 | 105 throw CNewException(); |
rlm@1 | 106 // return 1; |
rlm@1 | 107 } |
rlm@1 | 108 CNewHandlerSetter::CNewHandlerSetter() |
rlm@1 | 109 { |
rlm@1 | 110 // MemErrorOldVCFunction = _set_new_handler(MemErrorVC); |
rlm@1 | 111 } |
rlm@1 | 112 CNewHandlerSetter::~CNewHandlerSetter() |
rlm@1 | 113 { |
rlm@1 | 114 // _set_new_handler(MemErrorOldVCFunction); |
rlm@1 | 115 } |
rlm@1 | 116 */ |