/* -*- C++ -*- */ //============================================================================= /** * @file Malloc_Base.h * * $Id$ * * @author Doug Schmidt and Irfan Pyarali */ //============================================================================= #ifndef ACE_MALLOC_BASE_H #define ACE_MALLOC_BASE_H #include /**/ "ace/pre.h" #include "ace/ACE_export.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "ace/os_include/sys/os_types.h" #include "ace/os_include/sys/os_mman.h" #include "ace/os_include/sys/os_types.h" // The definition of this class is located in Malloc.cpp. /** * @class ACE_Allocator * * @brief Interface for a dynamic memory allocator that uses inheritance * and dynamic binding to provide extensible mechanisms for * allocating and deallocating memory. */ class ACE_Export ACE_Allocator { public: // = Memory Management /// Get pointer to a default . static ACE_Allocator *instance (void); /// Set pointer to a process-wide and return existing /// pointer. static ACE_Allocator *instance (ACE_Allocator *); /// Delete the dynamically allocated Singleton static void close_singleton (void); /// "No-op" constructor (needed to make certain compilers happy). ACE_Allocator (void); /// Virtual destructor virtual ~ACE_Allocator (void); /// Allocate , but don't give them any initial value. virtual void *malloc (size_t nbytes) = 0; /// Allocate , giving them . virtual void *calloc (size_t nbytes, char initial_value = '\0') = 0; /// Allocate each of size , giving them /// . virtual void *calloc (size_t n_elem, size_t elem_size, char initial_value = '\0') = 0; /// Free (must have been allocated by ). virtual void free (void *ptr) = 0; /// Remove any resources associated with this memory manager. virtual int remove (void) = 0; // = Map manager like functions /** * Associate with . If == 0 then do * not allow duplicate / associations, else if * != 0 then allow duplicate / * assocations. Returns 0 if successfully binds (1) a previously * unbound or (2) != 0, returns 1 if trying to * bind a previously bound and == 0, else * returns -1 if a resource failure occurs. */ virtual int bind (const char *name, void *pointer, int duplicates = 0) = 0; /** * Associate with . Does not allow duplicate * / associations. Returns 0 if successfully binds * (1) a previously unbound , 1 if trying to bind a previously * bound , or returns -1 if a resource failure occurs. When * this call returns 's value will always reference the * void * that is associated with. Thus, if the caller needs * to use (e.g., to free it) a copy must be maintained by * the caller. */ virtual int trybind (const char *name, void *&pointer) = 0; /// Locate and pass out parameter via pointer. If found, /// return 0, returns -1 if failure occurs. virtual int find (const char *name, void *&pointer) = 0; /// Returns 0 if the name is in the mapping. -1, otherwise. virtual int find (const char *name) = 0; /// Unbind (remove) the name from the map. Don't return the pointer /// to the caller virtual int unbind (const char *name) = 0; /// Break any association of name. Returns the value of pointer in /// case the caller needs to deallocate memory. virtual int unbind (const char *name, void *&pointer) = 0; // = Protection and "sync" (i.e., flushing memory to persistent // backing store). /** * Sync bytes of the memory region to the backing store * starting at base_addr_>. If == -1 then sync the * whole region. */ virtual int sync (ssize_t len = -1, int flags = MS_SYNC) = 0; /// Sync bytes of the memory region to the backing store /// starting at . virtual int sync (void *addr, size_t len, int flags = MS_SYNC) = 0; /** * Change the protection of the pages of the mapped region to * starting at base_addr_> up to bytes. If == -1 * then change protection of all pages in the mapped region. */ virtual int protect (ssize_t len = -1, int prot = PROT_RDWR) = 0; /// Change the protection of the pages of the mapped region to /// starting at up to bytes. virtual int protect (void *addr, size_t len, int prot = PROT_RDWR) = 0; #if defined (ACE_HAS_MALLOC_STATS) /// Dump statistics of how malloc is behaving. virtual void print_stats (void) const = 0; #endif /* ACE_HAS_MALLOC_STATS */ /// Dump the state of the object. virtual void dump (void) const = 0; private: // DO NOT ADD ANY STATE (DATA MEMBERS) TO THIS CLASS!!!! See the // implementation for explanation. /// Pointer to a process-wide instance. static ACE_Allocator *allocator_; /// Must delete the if non-0. static int delete_allocator_; }; #include /**/ "ace/post.h" #endif /* ACE_MALLOC_BASE_H */