#include <Malloc_Base.h>
Inheritance diagram for ACE_Allocator:


Public Methods | |
| ACE_Allocator (void) | |
| "No-op" constructor (needed to make certain compilers happy). More... | |
| virtual | ~ACE_Allocator (void) |
| Virtual destructor. More... | |
| virtual void * | malloc (size_t nbytes)=0 |
| Allocate <nbytes>, but don't give them any initial value. More... | |
| virtual void * | calloc (size_t nbytes, char initial_value='\0')=0 |
| Allocate <nbytes>, giving them <initial_value>. More... | |
| virtual void * | calloc (size_t n_elem, size_t elem_size, char initial_value='\0')=0 |
| Allocate <n_elem> each of size <elem_size>, giving them <initial_value>. More... | |
| virtual void | free (void *ptr)=0 |
| Free <ptr> (must have been allocated by <ACE_Allocator::malloc>). More... | |
| virtual int | remove (void)=0 |
| Remove any resources associated with this memory manager. More... | |
| virtual int | bind (const char *name, void *pointer, int duplicates=0)=0 |
| virtual int | trybind (const char *name, void *&pointer)=0 |
| virtual int | find (const char *name, void *&pointer)=0 |
| Locate <name> and pass out parameter via pointer. If found, return 0, returns -1 if failure occurs. More... | |
| virtual int | find (const char *name)=0 |
| Returns 0 if the name is in the mapping. -1, otherwise. More... | |
| virtual int | unbind (const char *name)=0 |
| Unbind (remove) the name from the map. Don't return the pointer to the caller. More... | |
| virtual int | unbind (const char *name, void *&pointer)=0 |
| Break any association of name. Returns the value of pointer in case the caller needs to deallocate memory. More... | |
| virtual int | sync (ssize_t len=-1, int flags=MS_SYNC)=0 |
| virtual int | sync (void *addr, size_t len, int flags=MS_SYNC)=0 |
| Sync <len> bytes of the memory region to the backing store starting at <addr_>. More... | |
| virtual int | protect (ssize_t len=-1, int prot=PROT_RDWR)=0 |
| virtual int | protect (void *addr, size_t len, int prot=PROT_RDWR)=0 |
| Change the protection of the pages of the mapped region to <prot> starting at <addr> up to <len> bytes. More... | |
| virtual void | dump (void) const=0 |
| Dump the state of the object. More... | |
Static Public Methods | |
| ACE_Allocator * | instance (void) |
| Get pointer to a default <ACE_Allocator>. More... | |
| ACE_Allocator * | instance (ACE_Allocator *) |
| Set pointer to a process-wide <ACE_Allocator> and return existing pointer. More... | |
| void | close_singleton (void) |
| Delete the dynamically allocated Singleton. More... | |
Static Private Attributes | |
| ACE_Allocator * | allocator_ = 0 |
| Pointer to a process-wide <ACE_Allocator> instance. More... | |
| int | delete_allocator_ = 0 |
| Must delete the <allocator_> if non-0. More... | |
Definition at line 33 of file Malloc_Base.h.
|
|
"No-op" constructor (needed to make certain compilers happy).
Definition at line 112 of file Malloc_Allocator.cpp. References ACE_TRACE.
00113 {
00114 ACE_TRACE ("ACE_Allocator::ACE_Allocator");
00115 }
|
|
|
Virtual destructor.
Definition at line 107 of file Malloc_Allocator.cpp. References ACE_TRACE.
00108 {
00109 ACE_TRACE ("ACE_Allocator::~ACE_Allocator");
00110 }
|
|
||||||||||||||||
|
Associate <name> with <pointer>. If <duplicates> == 0 then do not allow duplicate <name>/<pointer> associations, else if <duplicates> != 0 then allow duplicate <name>/<pointer> assocations. Returns 0 if successfully binds (1) a previously unbound <name> or (2) <duplicates> != 0, returns 1 if trying to bind a previously bound <name> and <duplicates> == 0, else returns -1 if a resource failure occurs. Implemented in ACE_New_Allocator. Referenced by ACE_Configuration_Heap::create_index. |
|
||||||||||||||||
|
Allocate <n_elem> each of size <elem_size>, giving them <initial_value>.
Implemented in ACE_New_Allocator. |
|
||||||||||||
|
Allocate <nbytes>, giving them <initial_value>.
Implemented in ACE_New_Allocator. |
|
|
Delete the dynamically allocated Singleton.
Definition at line 90 of file Malloc_Allocator.cpp. References ACE_GUARD, ACE_MT, ACE_TRACE, allocator_, delete_allocator_, and ACE_Static_Object_Lock::instance. Referenced by ACE_Object_Manager::fini.
00091 {
00092 ACE_TRACE ("ACE_Allocator::close_singleton");
00093
00094 ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex, ace_mon,
00095 *ACE_Static_Object_Lock::instance ()));
00096
00097 if (ACE_Allocator::delete_allocator_)
00098 {
00099 // This should never be executed.... See the
00100 // ACE_Allocator::instance (void) method for an explanation.
00101 delete ACE_Allocator::allocator_;
00102 ACE_Allocator::allocator_ = 0;
00103 ACE_Allocator::delete_allocator_ = 0;
00104 }
00105 }
|
|
|
Dump the state of the object.
Implemented in ACE_New_Allocator. Referenced by ACE_RB_Tree::dump, ACE_Data_Block::dump, ACE_Map_Manager::dump, and ACE_Hash_Map_Manager_Ex::dump. |
|
|
Returns 0 if the name is in the mapping. -1, otherwise.
Implemented in ACE_New_Allocator. |
|
||||||||||||
|
Locate <name> and pass out parameter via pointer. If found, return 0, returns -1 if failure occurs.
Implemented in ACE_New_Allocator. Referenced by ACE_Configuration_Heap::create_index. |
|
|
|
Set pointer to a process-wide <ACE_Allocator> and return existing pointer.
Definition at line 75 of file Malloc_Allocator.cpp. References ACE_GUARD_RETURN, ACE_MT, ACE_TRACE, allocator_, delete_allocator_, and ACE_Static_Object_Lock::instance.
00076 {
00077 ACE_TRACE ("ACE_Allocator::instance");
00078 ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon,
00079 *ACE_Static_Object_Lock::instance (), 0));
00080 ACE_Allocator *t = ACE_Allocator::allocator_;
00081
00082 // We can't safely delete it since we don't know who created it!
00083 ACE_Allocator::delete_allocator_ = 0;
00084
00085 ACE_Allocator::allocator_ = r;
00086 return t;
00087 }
|
|
|
Get pointer to a default <ACE_Allocator>.
Definition at line 27 of file Malloc_Allocator.cpp. References ACE_ASSERT, ACE_GUARD_RETURN, ACE_MT, allocator_, and ACE_Static_Object_Lock::instance. Referenced by ACE_Activation_Queue::ACE_Activation_Queue, ACE_Array_Base::ACE_Array_Base, ACE_Data_Block::ACE_Data_Block, ACE_Double_Linked_List::ACE_Double_Linked_List, ACE_Obstack_T::ACE_Obstack_T, ACE_Ordered_MultiSet::ACE_Ordered_MultiSet, ACE_Read_Buffer::ACE_Read_Buffer, ACE_SString::ACE_SString, ACE_Unbounded_Queue::ACE_Unbounded_Queue, ACE_Unbounded_Set::ACE_Unbounded_Set, ACE_Unbounded_Stack::ACE_Unbounded_Stack, ACE_Message_Block::init_i, ACE_RB_Tree::open, ACE_Map_Manager::open, and ACE_Hash_Map_Manager_Ex::open.
00028 {
00029 // ACE_TRACE ("ACE_Allocator::instance");
00030
00031 if (ACE_Allocator::allocator_ == 0)
00032 {
00033 // Perform Double-Checked Locking Optimization.
00034 ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex, ace_mon,
00035 *ACE_Static_Object_Lock::instance (), 0));
00036
00037 if (ACE_Allocator::allocator_ == 0)
00038 {
00039 // Have a seat. We want to avoid ever having to delete the
00040 // ACE_Allocator instance, to avoid shutdown order
00041 // dependencies. ACE_New_Allocator never needs to be
00042 // destroyed: its destructor is empty and its instance
00043 // doesn't have any state. Therefore, sizeof
00044 // ACE_New_Allocator is equal to sizeof void *. It's
00045 // instance just contains a pointer to its virtual function
00046 // table.
00047 //
00048 // So, we allocate space for the ACE_New_Allocator instance
00049 // in the data segment. Because its size is the same as
00050 // that of a pointer, we allocate it as a pointer so that it
00051 // doesn't get constructed statically. We never bother to
00052 // destroy it.
00053 static void *allocator_instance = 0;
00054
00055 // Check this critical assumption. We put it in a variable
00056 // first to avoid stupid compiler warnings that the
00057 // condition may always be true/false.
00058 # if !defined (ACE_NDEBUG)
00059 int assertion = (sizeof allocator_instance ==
00060 sizeof (ACE_New_Allocator));
00061 ACE_ASSERT (assertion);
00062 # endif /* !ACE_NDEBUG */
00063
00064 // Initialize the allocator_instance by using a placement
00065 // new.
00066 ACE_Allocator::allocator_ =
00067 new (&allocator_instance) ACE_New_Allocator;
00068 }
00069 }
00070
00071 return ACE_Allocator::allocator_;
00072 }
|
|
|
Allocate <nbytes>, but don't give them any initial value.
Implemented in ACE_New_Allocator. Referenced by ACE_SString::ACE_SString, ACE_Configuration_Heap::add_section, ACE_Message_Block::clone, ACE_Configuration_Heap::create_index, ACE_Message_Block::duplicate, ACE_Message_Block::init_i, ACE_Configuration_Heap::new_section, ACE_SString::operator=, ACE_Read_Buffer::rec_read, ACE_String_Base::resize, ACE_Configuration_Heap::set_binary_value, ACE_Configuration_Heap::set_integer_value, and ACE_Configuration_Heap::set_string_value. |
|
||||||||||||||||
|
Change the protection of the pages of the mapped region to <prot> starting at <addr> up to <len> bytes.
Implemented in ACE_New_Allocator. |
|
||||||||||||
|
Change the protection of the pages of the mapped region to <prot> starting at <this->base_addr_> up to <len> bytes. If <len> == -1 then change protection of all pages in the mapped region. Implemented in ACE_New_Allocator. |
|
|
Remove any resources associated with this memory manager.
Implemented in ACE_New_Allocator. Referenced by ACE_Configuration_Heap::create_index. |
|
||||||||||||||||
|
Sync <len> bytes of the memory region to the backing store starting at <addr_>.
Implemented in ACE_New_Allocator. |
|
||||||||||||
|
Sync <len> bytes of the memory region to the backing store starting at <this->base_addr_>. If <len> == -1 then sync the whole region. Implemented in ACE_New_Allocator. Referenced by ACE_Configuration_Heap::new_section, ACE_Map_Manager::rebind_i, and ACE_Configuration_Heap::~ACE_Configuration_Heap. |
|
||||||||||||
|
Associate <name> with <pointer>. Does not allow duplicate <name>/<pointer> associations. Returns 0 if successfully binds (1) a previously unbound <name>, 1 if trying to bind a previously bound <name>, or returns -1 if a resource failure occurs. When this call returns <pointer>'s value will always reference the void * that <name> is associated with. Thus, if the caller needs to use <pointer> (e.g., to free it) a copy must be maintained by the caller. Implemented in ACE_New_Allocator. |
|
||||||||||||
|
Break any association of name. Returns the value of pointer in case the caller needs to deallocate memory.
Implemented in ACE_New_Allocator. |
|
|
Unbind (remove) the name from the map. Don't return the pointer to the caller.
Implemented in ACE_New_Allocator. |
|
|
Pointer to a process-wide <ACE_Allocator> instance.
Reimplemented in ACE_Allocator_Adapter. Definition at line 19 of file Malloc.cpp. Referenced by close_singleton, and instance. |
|
|
Must delete the <allocator_> if non-0.
Definition at line 24 of file Malloc.cpp. Referenced by close_singleton, and instance. |
1.2.14 written by Dimitri van Heesch,
© 1997-2002