+#ifdef MADV_HUGEPAGE
+ if (ret != MAP_FAILED && ((uintptr_t)ret & (2*1024*1024 - 1))) {
+ // try to manually realign assuming bottom-to-top alloc
+ munmap(ret, size);
+ ret = (void *)((uintptr_t)ret & ~(2*1024*1024 - 1));
+ ret = mmap(ret, size, prot, flags, -1, 0);
+ }
+ if (ret != MAP_FAILED)
+ madvise(ret, size, MADV_HUGEPAGE);
+#endif