5 #define MEMALLOC void *operator new( size_t size ){ \
6 return MYMALLOC( size );\
8 void operator delete( void *p, size_t size ){ \
11 void *operator new[]( size_t size ){ \
12 return MYMALLOC( size );\
14 void operator delete[]( void *p, size_t size ){\
19 void *MYMALLOC(size_t size);
20 void MYFREE(void *ptr);
21 void AddUserHeapToSnapshot();
23 The following code example is taken from the book
24 The C++ Standard Library - A Tutorial and Reference
25 by Nicolai M. Josuttis, Addison-Wesley, 1999
26 © Copyright Nicolai M. Josuttis 1999
27 Permission to copy, use, modify, sell and distribute this software
28 is granted provided this copyright notice appears in all copies.
29 This software is provided "as is" without express or implied
30 warranty, and with no claim as to its suitability for any purpose.
38 typedef const T* const_pointer;
40 typedef const T& const_reference;
41 typedef size_t size_type;
42 typedef size_t difference_type;
44 // rebind allocator to type U
47 typedef MyAlloc<U> other;
50 // return address of values
51 pointer address (reference value) const {
54 const_pointer address (const_reference value) const {
58 /* constructors and destructor
59 * - nothing to do because the allocator has no state
63 MyAlloc(const MyAlloc&) throw() {
66 MyAlloc (const MyAlloc<U>&) throw() {
71 // return maximum number of elements that can be allocated
72 size_type max_size () const throw() {
73 return std::numeric_limits<size_t>::max() / sizeof(T);
76 // allocate but don't initialize num elements of type T
77 pointer allocate (size_type num, const void* = 0) {
78 pointer p = ( pointer )MYMALLOC( num * sizeof( T ) );
82 // initialize elements of allocated storage p with value value
83 void construct (pointer p, const T& value) {
84 // initialize memory with placement new
85 new((void*)p)T(value);
88 // destroy elements of initialized storage p
89 void destroy (pointer p) {
90 // destroy objects by calling their destructor
94 // deallocate storage p of deleted elements
95 void deallocate (pointer p, size_type num) {
100 // return that all specializations of this allocator are interchangeable
101 template <class T1, class T2>
102 bool operator== (const MyAlloc<T1>&,
103 const MyAlloc<T2>&) throw() {
106 template <class T1, class T2>
107 bool operator!= (const MyAlloc<T1>&,
108 const MyAlloc<T2>&) throw() {
116 typedef void * mspace;
117 extern void* mspace_malloc(mspace msp, size_t bytes);
118 extern void mspace_free(mspace msp, void* mem);
119 extern mspace create_mspace_with_base(void* base, size_t capacity, int locked);
120 extern mspace create_mspace(size_t capacity, int locked);
122 }; /* end of extern "C" */