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 {}