58 char* align_reserved_region(char* addr, const size_t len,
59 const size_t prefix_size,
60 const size_t prefix_align,
61 const size_t suffix_size,
62 const size_t suffix_align);
63
64 // Reserve memory, call align_reserved_region() to alignment it and return the
65 // result.
66 char* reserve_and_align(const size_t reserve_size,
67 const size_t prefix_size,
68 const size_t prefix_align,
69 const size_t suffix_size,
70 const size_t suffix_align);
71
72 protected:
73 // Create protection page at the beginning of the space.
74 void protect_noaccess_prefix(const size_t size);
75
76 public:
77 // Constructor
78 ReservedSpace(size_t size);
79 ReservedSpace(size_t size, size_t alignment, bool large,
80 char* requested_address = NULL,
81 const size_t noaccess_prefix = 0);
82 ReservedSpace(const size_t suffix_size, const size_t suffix_align,
83 char* requested_address,
84 const size_t noaccess_prefix = 0);
85 ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
86
87 // Accessors
88 char* base() const { return _base; }
89 size_t size() const { return _size; }
90 size_t alignment() const { return _alignment; }
91 bool special() const { return _special; }
92 bool executable() const { return _executable; }
93 size_t noaccess_prefix() const { return _noaccess_prefix; }
94 bool is_reserved() const { return _base != NULL; }
95 void release();
96
97 // Splitting
|
58 char* align_reserved_region(char* addr, const size_t len,
59 const size_t prefix_size,
60 const size_t prefix_align,
61 const size_t suffix_size,
62 const size_t suffix_align);
63
64 // Reserve memory, call align_reserved_region() to alignment it and return the
65 // result.
66 char* reserve_and_align(const size_t reserve_size,
67 const size_t prefix_size,
68 const size_t prefix_align,
69 const size_t suffix_size,
70 const size_t suffix_align);
71
72 protected:
73 // Create protection page at the beginning of the space.
74 void protect_noaccess_prefix(const size_t size);
75
76 public:
77 // Constructor
78 ReservedSpace() :
79 _base(NULL), _size(0), _noaccess_prefix(0), _alignment(0),
80 _special(false), _executable(false) {}
81
82 ReservedSpace(size_t size);
83 ReservedSpace(size_t size, size_t alignment, bool large,
84 char* requested_address = NULL,
85 const size_t noaccess_prefix = 0);
86 ReservedSpace(const size_t suffix_size, const size_t suffix_align,
87 char* requested_address,
88 const size_t noaccess_prefix = 0);
89 ReservedSpace(size_t size, size_t alignment, bool large, bool executable);
90
91 // Accessors
92 char* base() const { return _base; }
93 size_t size() const { return _size; }
94 size_t alignment() const { return _alignment; }
95 bool special() const { return _special; }
96 bool executable() const { return _executable; }
97 size_t noaccess_prefix() const { return _noaccess_prefix; }
98 bool is_reserved() const { return _base != NULL; }
99 void release();
100
101 // Splitting
|