7 #ifndef CVMFS_UTIL_SMALLOC_H_
8 #define CVMFS_UTIL_SMALLOC_H_
20 #define PLATFORM_MAP_ANONYMOUS MAP_ANON
22 #define PLATFORM_MAP_ANONYMOUS MAP_ANONYMOUS
26 #ifdef CVMFS_NAMESPACE_GUARD
27 namespace CVMFS_NAMESPACE_GUARD {
38 return (size + 7) & ~static_cast<uint64_t>(7);
42 void *
mem = malloc(size);
43 assert((mem || (size == 0)) &&
"Out Of Memory");
48 void *
mem = realloc(ptr, size);
49 assert((mem || (size == 0)) &&
"Out Of Memory");
54 void *
mem = calloc(count, size);
55 assert((mem || ((count * size) == 0)) &&
"Out Of Memory");
62 assert(size < std::numeric_limits<size_t>::max() - 4096);
64 const int anonymous_fd = -1;
65 const off_t offset = 0;
66 size_t pages = ((size + 2*
sizeof(size_t))+4095)/4096;
67 unsigned char *
mem =
static_cast<unsigned char *
>(
70 PROT_READ | PROT_WRITE,
76 assert((mem != MAP_FAILED) &&
"Out Of Memory");
78 *(
reinterpret_cast<size_t *
>(
mem) + 1) = pages;
79 return mem + 2*
sizeof(size_t);
83 unsigned char *area =
static_cast<unsigned char *
>(
mem);
84 area = area -
sizeof(size_t);
85 size_t pages = *(
reinterpret_cast<size_t *
>(area));
86 int retval = munmap(area-
sizeof(
size_t), pages*4096);
88 assert((retval == 0) &&
"Invalid umnmap");
95 static inline void *
__attribute__((used)) sxmmap(
size_t size) {
96 const int anonymous_fd = -1;
97 const off_t offset = 0;
98 void *mem = mmap(NULL,
100 PROT_READ | PROT_WRITE,
105 assert((mem != MAP_FAILED) &&
"Out Of Memory");
113 static inline void __attribute__((used)) sxunmap(
void *mem,
size_t size) {
114 int retval = munmap(mem, size);
115 assert((retval == 0) &&
"Invalid umnmap");
123 static inline void *
__attribute__((used)) sxmmap_align(
size_t size) {
124 assert((size % (2 * 1024 * 1024)) == 0);
125 char *mem =
reinterpret_cast<char *
>(sxmmap(2 * size));
126 uintptr_t head = size - (uintptr_t(mem) %
size);
129 uintptr_t tail = size - head;
131 sxunmap(mem + size, tail);
136 #ifdef CVMFS_NAMESPACE_GUARD
140 #endif // CVMFS_UTIL_SMALLOC_H_
assert((mem||(size==0))&&"Out Of Memory")
struct cvmcache_object_info __attribute__
static uint64_t RoundUp8(const uint64_t size)
#define PLATFORM_MAP_ANONYMOUS
const uint32_t kMemMarker