-
Notifications
You must be signed in to change notification settings - Fork 380
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cascaded allocator #2113
Open
smithAchang
wants to merge
46
commits into
DOCGroup:master
Choose a base branch
from
smithAchang:cascadedAllocator
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Cascaded allocator #2113
Changes from 18 commits
Commits
Show all changes
46 commits
Select commit
Hold shift + click to select a range
bd320b1
can compiled successfully on Windows Plat
smithAchang 37dc8f4
Allocator_Cascaded_Test.cpp增加
smithAchang c61b9be
add the 2*sum(Allocator of hierarchy) testing case
smithAchang 6166f88
bin/fuzz.pl find trailing whitespace
smithAchang 32d3d1f
bin/fuzz.pl find trailing whitespace 2
smithAchang e2a5511
compiler error
smithAchang 6835890
dsfdsdfMerge branch 'cascadedAllocator' of github.com:smithAchang/ACE…
smithAchang 150eb7b
use std::vector
smithAchang 089af45
linux compiling error & fix issue
smithAchang ac87bd4
according the routine of test framework
smithAchang b71f82d
key design comment for free API
smithAchang 34abb6e
fix space indent & const member field
smithAchang cf39680
using instead of typedef, will be fitter for template declaration
smithAchang 78e7165
remove duplicate empty lines
smithAchang e5e55bc
free protected when malloc in constructor failed
smithAchang 00016bf
1. add assert for free API
smithAchang 912d9db
add comments for ACE_NEW fail in constructor
smithAchang 833bc87
Merge branch 'master' into cascadedAllocator
smithAchang 40675b0
fix ""One line, indent is always 2 spaces
smithAchang 148734d
Merge branch 'cascadedAllocator' of github.com:smithAchang/ACE_TAO in…
smithAchang 6e9a17c
for g++ -fno-implicit-templates consideration
smithAchang d065069
implement the dump API
smithAchang eba85a4
fix for statement of dump API
smithAchang 1e1862d
fix trailing whitespace
smithAchang 0f26ecb
add hierarchy_.size () for dump API
smithAchang 4a7fcd0
1、fix some coding style using this keyword to distinguish vars
smithAchang cf686b3
add the pool_sum api
smithAchang 4c27ab0
1、fix constructor description
smithAchang 8210ac0
1、split ACE_NEW* with empty line, the macro function may end the flow
smithAchang e8d9b51
1、fix unsupported API return nullptr
smithAchang 63e543f
add deeply test case for calloc API
smithAchang d4e7d14
modify growth strategy to exponential growth when hierarchy grows fo…
smithAchang 874d9cb
keep the consistent to cascaded malloc branch
smithAchang 92066a1
add exception safety for the growth of chunk sum
smithAchang 4a9c114
fix the exception safety for calling vector push_back API
smithAchang 8450156
Using std::unique_ptr will be more exception-safe literally
smithAchang 0c8067c
delete defence codes
smithAchang cc4053c
delete unused temp stack var
smithAchang ac5f611
fix invalid document of class
smithAchang fec93be
fix coding style of comment
smithAchang 42b409e
fix for right const coding style
smithAchang a837b5d
format using clang-format
smithAchang c9ead44
fix for coding style of function call
smithAchang 021ef62
optimization for cascaded allocator considering the character that on…
smithAchang 92c3499
Merge branch 'master' into cascadedAllocator
smithAchang b84e0c4
modify the branch judgement of the last allocator using const var
smithAchang File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,7 +5,8 @@ | |
* @file Malloc_T.h | ||
* | ||
* @author Douglas C. Schmidt <[email protected]> and | ||
* Irfan Pyarali <[email protected]> | ||
* Irfan Pyarali <[email protected]> and | ||
smithAchang <[email protected]> | ||
*/ | ||
//========================================================================== | ||
|
||
|
@@ -15,6 +16,7 @@ | |
|
||
#include "ace/Malloc.h" /* Need ACE_Control_Block */ | ||
#include "ace/Malloc_Base.h" /* Need ACE_Allocator */ | ||
#include "ace/Null_Mutex.h" /* Need ACE_Null_Mutex */ | ||
|
||
#if !defined (ACE_LACKS_PRAGMA_ONCE) | ||
# pragma once | ||
|
@@ -24,6 +26,8 @@ | |
#include "ace/Free_List.h" | ||
#include "ace/Guard_T.h" | ||
|
||
#include <vector> | ||
|
||
ACE_BEGIN_VERSIONED_NAMESPACE_DECL | ||
|
||
/** | ||
|
@@ -203,6 +207,101 @@ class ACE_Dynamic_Cached_Allocator : public ACE_New_Allocator | |
size_t chunk_size_; | ||
}; | ||
|
||
/** | ||
* @class ACE_Cascaded_Dynamic_Cached_Allocator | ||
* | ||
* @brief A fixed-size-based allocator that caches blocks for quicker access, | ||
* but with a hierarchy of cascaded, nested allocators | ||
* | ||
* This class enables caching of dynamically allocated, | ||
* fixed-size chunks. Notice that the @a chunk_size | ||
* must be greater than or equal to <code> sizeof (void*) </code> for | ||
* this to work properly. | ||
* | ||
* Notice that when the latest allocator is empty, the allocator will create a fresh | ||
* @a ACE_Dynamic_Cached_Allocator allocator again with | ||
* <code> init_n_chunks* the sum of current allocators </code> as it's constructor parameter, | ||
* so all the allocators will form a cascaded hierarchy. | ||
|
||
* This class can be configured flexibly with different types of | ||
* ACE_LOCK strategies that support the @a ACE_Thread_Mutex and @a | ||
* ACE_Process_Mutex constructor API. | ||
* | ||
* @sa ACE_Dynamic_Cached_Allocator | ||
*/ | ||
template <class ACE_LOCK> | ||
class ACE_Cascaded_Dynamic_Cached_Allocator : public ACE_Allocator | ||
{ | ||
public: | ||
/// Create a cached memory pool with @a n_chunks chunks | ||
/// each with @a chunk_size size. | ||
ACE_Cascaded_Dynamic_Cached_Allocator (size_t initial_n_chunks, size_t chunk_size); | ||
|
||
/// Clear things up. | ||
~ACE_Cascaded_Dynamic_Cached_Allocator (); | ||
|
||
/** | ||
* Get a chunk of memory from free list cache. Note that @a nbytes is | ||
* only checked to make sure that it's less or equal to @a chunk_size, | ||
* and is otherwise ignored since malloc() always returns a pointer to an | ||
* item of @a chunk_size size. | ||
*/ | ||
virtual void *malloc (size_t nbytes); | ||
|
||
/** | ||
* Get a chunk of memory from free list cache, giving them | ||
* @a initial_value. Note that @a nbytes is only checked to make sure | ||
* that it's less or equal to @a chunk_size, and is otherwise ignored | ||
* since calloc() always returns a pointer to an item of @a chunk_size. | ||
*/ | ||
virtual void *calloc (size_t nbytes, char initial_value = '\0'); | ||
|
||
/// This method is a no-op and just returns 0 since the free list | ||
/// only works with fixed sized entities. | ||
virtual void *calloc (size_t n_elem, size_t elem_size, char initial_value = '\0'); | ||
|
||
/// Return a chunk of memory back to free list cache. | ||
virtual void free (void *ptr); | ||
|
||
/// These methods are no-ops. | ||
virtual int remove (); | ||
smithAchang marked this conversation as resolved.
Show resolved
Hide resolved
|
||
virtual int bind (const char *name, void *pointer, int duplicates = 0); | ||
virtual int trybind (const char *name, void *&pointer); | ||
virtual int find (const char *name, void *&pointer); | ||
virtual int find (const char *name); | ||
virtual int unbind (const char *name); | ||
virtual int unbind (const char *name, void *&pointer); | ||
virtual int sync (ssize_t len = -1, int flags = MS_SYNC); | ||
virtual int sync (void *addr, size_t len, int flags = MS_SYNC); | ||
virtual int protect (ssize_t len = -1, int prot = PROT_RDWR); | ||
virtual int protect (void *addr, size_t len, int prot = PROT_RDWR); | ||
virtual void dump () const; | ||
|
||
/// Return the number of chunks available in the hierarchy. | ||
size_t pool_depth (); | ||
|
||
/// Returns a reference to the lock used to provide mutual exclusion to | ||
/// the allocator hierarchy. | ||
ACE_LOCK &mutex (); | ||
|
||
private: | ||
// Useful STL-style traits. | ||
using comb_alloc_type = ACE_Dynamic_Cached_Allocator<ACE_Null_Mutex>; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't this be ACE_LOCK? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. there is no need because the nested allocator will be protected by container class api |
||
using comb_alloc_ptr = comb_alloc_type*; | ||
|
||
/// Synchronization variable for API. | ||
ACE_LOCK mutex_; | ||
|
||
/// Remember how we allocate the memory so we can clear things up later. | ||
std::vector<comb_alloc_ptr> hierarchy_; | ||
|
||
/// Remember the size of initial n_chunks for creating fresh allocator in future. | ||
const size_t initial_n_chunks_; | ||
|
||
/// Remember the size of our chunks for creating fresh allocator in future. | ||
const size_t chunk_size_; | ||
}; | ||
|
||
/** | ||
* @class ACE_Allocator_Adapter | ||
* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
initialize tmp
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the temp var will be assigned or call flow is ended by
ACE_NEW
macroShould it be initialized?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the temp var will be assigned or call flow is ended by
ACE_NEW
macroShould it be initialized?