* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef LAZY_ALLOCATOR_HH
-#define LAZY_ALLOCATOR_HH
-
+#pragma once
#include <cstddef>
#include <utility>
#include <type_traits>
pointer
allocate (size_type const n) {
+#ifdef __OpenBSD__
void *p = mmap(nullptr, n * sizeof(value_type),
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_STACK, -1, 0);
if (p == MAP_FAILED)
throw std::bad_alloc();
return static_cast<pointer>(p);
+#else
+ return static_cast<pointer>(::operator new (n * sizeof(value_type)));
+#endif
}
void
deallocate (pointer const ptr, size_type const n) noexcept {
+#ifdef __OpenBSD__
munmap(ptr, n * sizeof(value_type));
+#else
+#if defined(__cpp_sized_deallocation) && (__cpp_sized_deallocation >= 201309)
+ ::operator delete (ptr, n * sizeof(value_type));
+#else
+ (void) n;
+ ::operator delete (ptr);
+#endif
+#endif
}
void construct (T*) const noexcept {}
bool operator!= (lazy_allocator<T> const&, lazy_allocator<T> const&) noexcept {
return false;
}
-
-#endif // LAZY_ALLOCATOR_HH