Skip to content

Commit dd5850d

Browse files
committed
unroll
1 parent f014495 commit dd5850d

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

cp-algo/util/big_alloc.hpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,28 @@ namespace cp_algo {
2626

2727
#if CP_ALGO_USE_MMAP
2828
[[nodiscard]] T* allocate(std::size_t n) {
29-
auto *raw = base::allocate(n);
30-
if(n * sizeof(T) >= (1 << 20)) {
31-
madvise(raw, n, MADV_HUGEPAGE);
32-
madvise(raw, n, MADV_POPULATE_WRITE);
29+
if(n * sizeof(T) < 1024 * 1024) {
30+
return base::allocate(n);
3331
}
34-
return raw;
32+
n *= sizeof(T);
33+
void* raw = mmap(nullptr, n,
34+
PROT_READ | PROT_WRITE,
35+
MAP_PRIVATE | MAP_ANONYMOUS,
36+
-1, 0);
37+
madvise(raw, n, MADV_HUGEPAGE);
38+
madvise(raw, n, MADV_POPULATE_WRITE);
39+
return static_cast<T*>(raw);
3540
}
3641
#endif
3742

3843
#if CP_ALGO_USE_MMAP
3944
void deallocate(T* p, std::size_t n) noexcept {
40-
return base::deallocate(p, n);
45+
if(n * sizeof(T) < 1024 * 1024) {
46+
return base::deallocate(p, n);
47+
}
48+
if(p) {
49+
munmap(p, n * sizeof(T));
50+
}
4151
}
4252
#endif
4353
};

0 commit comments

Comments
 (0)