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