 |
PRCYCoin
2.0.0.7rc1
P2P Digital Currency
|
Go to the documentation of this file.
6 #ifndef BITCOIN_ALLOCATORS_H
7 #define BITCOIN_ALLOCATORS_H
16 #include <boost/thread/mutex.hpp>
17 #include <boost/thread/once.hpp>
30 template <
class Locker>
49 boost::mutex::scoped_lock lock(
mutex);
52 const size_t base_addr =
reinterpret_cast<size_t>(p);
53 const size_t start_page = base_addr &
page_mask;
54 const size_t end_page = (base_addr + size - 1) &
page_mask;
55 for (
size_t page = start_page; page <= end_page; page +=
page_size) {
56 Histogram::iterator it =
histogram.find(page);
60 histogram.insert(std::make_pair(page, 1));
71 boost::mutex::scoped_lock lock(
mutex);
74 const size_t base_addr =
reinterpret_cast<size_t>(p);
75 const size_t start_page = base_addr &
page_mask;
76 const size_t end_page = (base_addr + size - 1) &
page_mask;
77 for (
size_t page = start_page; page <= end_page; page +=
page_size) {
78 Histogram::iterator it =
histogram.find(page);
94 boost::mutex::scoped_lock lock(
mutex);
118 bool Lock(
const void* addr,
size_t len);
122 bool Unlock(
const void* addr,
size_t len);
167 template <
typename T>
173 template <
typename T>
184 template <
typename T>
187 typedef std::allocator<T>
base;
197 template <
typename U>
202 template <
typename _Other>
210 p = std::allocator<T>::allocate(n, hint);
222 std::allocator<T>::deallocate(p, n);
230 template <
typename T>
233 typedef std::allocator<T>
base;
243 template <
typename U>
248 template <
typename _Other>
257 std::allocator<T>::deallocate(p, n);
267 typedef std::vector<unsigned char, secure_allocator<unsigned char> >
SecureVector;
269 #endif // BITCOIN_ALLOCATORS_H
void UnlockObject(const T &t)
base::reference reference
void UnlockRange(void *p, size_t size)
base::reference reference
secure_allocator(const secure_allocator< U > &a) noexcept
static boost::once_flag init_flag
secure_allocator() noexcept
base::const_pointer const_pointer
~secure_allocator() noexcept
static void CreateInstance()
LockedPageManagerBase(size_t page_size)
Singleton class to keep track of locked (ie, non-swappable) memory pages, for use in std::allocator t...
~zero_after_free_allocator() noexcept
Thread-safe class to keep track of locked (ie, non-swappable) memory pages.
base::value_type value_type
bool Unlock(const void *addr, size_t len)
Unlock memory pages.
void memory_cleanse(void *ptr, size_t len)
base::size_type size_type
bool Lock(const void *addr, size_t len)
Lock memory pages.
base::const_pointer const_pointer
base::difference_type difference_type
void LockObject(const T &t)
std::basic_string< char, std::char_traits< char >, secure_allocator< char > > SecureString
std::vector< char, zero_after_free_allocator< char > > CSerializeData
base::const_reference const_reference
base::value_type value_type
base::size_type size_type
std::map< size_t, int > Histogram
secure_allocator< _Other > other
static LockedPageManager * _instance
zero_after_free_allocator() noexcept
T * allocate(std::size_t n, const void *hint=0)
std::vector< unsigned char, secure_allocator< unsigned char > > SecureVector
OS-dependent memory page locking/unlocking.
zero_after_free_allocator(const zero_after_free_allocator< U > &a) noexcept
void deallocate(T *p, std::size_t n)
static LockedPageManager & Instance()
zero_after_free_allocator< _Other > other
zero_after_free_allocator(const zero_after_free_allocator &a) noexcept
void deallocate(T *p, std::size_t n)
secure_allocator(const secure_allocator &a) noexcept
base::const_reference const_reference
base::difference_type difference_type
void LockRange(void *p, size_t size)