X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=mymemory.h;h=6b35f5d14f0efb46738d9389c2e8af72c9d3c6a7;hb=eb3b6cccf71b9eeee035e2c98566dfa279e402ae;hp=2bec138381e45768d9d6f2129824eca9ebdc23e9;hpb=322fd21c16209780d43872cc44bb68d38172eabc;p=model-checker.git diff --git a/mymemory.h b/mymemory.h index 2bec138..6b35f5d 100644 --- a/mymemory.h +++ b/mymemory.h @@ -1,33 +1,59 @@ +/** @file mymemory.h + * @brief Memory allocation functions. + */ + #ifndef _MY_MEMORY_H #define _MY_MEMORY_H #include #include -#define MEMALLOC void *operator new( size_t size ){ \ - return MYMALLOC( size );\ - }\ - void operator delete( void *p, size_t size ){ \ - MYFREE( p ); \ - }\ - void *operator new[]( size_t size ){ \ - return MYMALLOC( size );\ - }\ - void operator delete[]( void *p, size_t size ){\ - MYFREE( p );\ - } - - -void *MYMALLOC(size_t size); -void MYFREE(void *ptr); -/* -The following code example is taken from the book -The C++ Standard Library - A Tutorial and Reference -by Nicolai M. Josuttis, Addison-Wesley, 1999 -© Copyright Nicolai M. Josuttis 1999 -Permission to copy, use, modify, sell and distribute this software -is granted provided this copyright notice appears in all copies. -This software is provided "as is" without express or implied -warranty, and with no claim as to its suitability for any purpose. -*/ + +/** MEMALLOC declares the allocators for a class to allocate + * memory in the non-snapshotting heap. */ +#define MEMALLOC \ + void * operator new(size_t size) { \ + return model_malloc(size);\ + }\ + void operator delete(void *p, size_t size) { \ + model_free( p ); \ + }\ + void * operator new[](size_t size) { \ + return model_malloc(size);\ + }\ + void operator delete[](void *p, size_t size) {\ + model_free(p);\ + } + +/** SNAPSHOTALLOC declares the allocators for a class to allocate + * memory in the snapshotting heap. */ +#define SNAPSHOTALLOC + +void *model_malloc(size_t size); +void *model_calloc(size_t count, size_t size); +void model_free(void *ptr); + +static inline void * snapshot_malloc(size_t size) { + return malloc(size); +} +static inline void * snapshot_calloc(size_t count, size_t size) { + return calloc(count, size); +} +static inline void snapshot_free(void *ptr) { + free(ptr); +} + +void system_free( void * ptr ); +void *system_malloc( size_t size ); + +/** @brief Provides a non-snapshotting allocator for use in STL classes. + * + * The code was adapted from a code example from the book The C++ + * Standard Library - A Tutorial and Reference by Nicolai M. Josuttis, + * Addison-Wesley, 1999 © Copyright Nicolai M. Josuttis 1999 + * Permission to copy, use, modify, sell and distribute this software + * is granted provided this copyright notice appears in all copies. + * This software is provided "as is" without express or implied + * warranty, and with no claim as to its suitability for any purpose. + */ template class MyAlloc { public: @@ -74,7 +100,7 @@ template // allocate but don't initialize num elements of type T pointer allocate (size_type num, const void* = 0) { - pointer p = ( pointer )MYMALLOC( num * sizeof( T ) ); + pointer p = ( pointer )model_malloc( num * sizeof( T ) ); return p; } @@ -92,16 +118,18 @@ template // deallocate storage p of deleted elements void deallocate (pointer p, size_type num) { - MYFREE((void*)p); + model_free((void*)p); } }; -// return that all specializations of this allocator are interchangeable +/** Return that all specializations of this allocator are interchangeable. */ template bool operator== (const MyAlloc&, const MyAlloc&) throw() { return true; } + +/** Return that all specializations of this allocator are interchangeable. */ template bool operator!= (const MyAlloc&, const MyAlloc&) throw() { @@ -114,10 +142,14 @@ extern "C" { typedef void * mspace; extern void* mspace_malloc(mspace msp, size_t bytes); extern void mspace_free(mspace msp, void* mem); +extern void* mspace_realloc(mspace msp, void* mem, size_t newsize); +extern void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); extern mspace create_mspace_with_base(void* base, size_t capacity, int locked); extern mspace create_mspace(size_t capacity, int locked); extern mspace mySpace; +extern void * basemySpace; #ifdef __cplusplus }; /* end of extern "C" */ #endif -#endif + +#endif /* _MY_MEMORY_H */