barretenberg
Loading...
Searching...
No Matches
mem.hpp
1#pragma once
2#include "log.hpp"
3#include "memory.h"
4#include "wasm_export.hpp"
5#include <cstdlib>
6#include <memory>
7// #include <malloc.h>
8
9#define pad(size, alignment) (size - (size % alignment) + ((size % alignment) == 0 ? 0 : alignment))
10
11#ifdef __APPLE__
12inline void* aligned_alloc(size_t alignment, size_t size)
13{
14 void* t = 0;
15 posix_memalign(&t, alignment, size);
16 if (t == 0) {
17 info("bad alloc of size: ", size);
18 std::abort();
19 }
20 return t;
21}
22
23inline void aligned_free(void* mem)
24{
25 free(mem);
26}
27#endif
28
29#if defined(__linux__) || defined(__wasm__)
30inline void* protected_aligned_alloc(size_t alignment, size_t size)
31{
32 size += (size % alignment);
33 void* t = nullptr;
34 // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
35 t = aligned_alloc(alignment, size);
36 if (t == nullptr) {
37 info("bad alloc of size: ", size);
38 std::abort();
39 }
40 return t;
41}
42
43#define aligned_alloc protected_aligned_alloc
44
45inline void aligned_free(void* mem)
46{
47 // NOLINTNEXTLINE(cppcoreguidelines-owning-memory, cppcoreguidelines-no-malloc)
48 free(mem);
49}
50#endif
51
52#ifdef _WIN32
53inline void* aligned_alloc(size_t alignment, size_t size)
54{
55 return _aligned_malloc(size, alignment);
56}
57
58inline void aligned_free(void* mem)
59{
60 _aligned_free(mem);
61}
62#endif
63
64// inline void print_malloc_info()
65// {
66// struct mallinfo minfo = mallinfo();
67
68// info("Total non-mmapped bytes (arena): ", minfo.arena);
69// info("Number of free chunks (ordblks): ", minfo.ordblks);
70// info("Number of fastbin blocks (smblks): ", minfo.smblks);
71// info("Number of mmapped regions (hblks): ", minfo.hblks);
72// info("Space allocated in mmapped regions (hblkhd): ", minfo.hblkhd);
73// info("Maximum total allocated space (usmblks): ", minfo.usmblks);
74// info("Space available in freed fastbin blocks (fsmblks): ", minfo.fsmblks);
75// info("Total allocated space (uordblks): ", minfo.uordblks);
76// info("Total free space (fordblks): ", minfo.fordblks);
77// info("Top-most, releasable space (keepcost): ", minfo.keepcost);
78// }