Add memory utilities

This commit is contained in:
Abdelrahman Said 2024-02-24 18:40:05 +00:00
parent 819d457048
commit 5a0aad5d52
2 changed files with 31 additions and 0 deletions

View File

@ -0,0 +1,8 @@
#ifndef MEM_UTILS_H
#define MEM_UTILS_H
#include "aliases.h"
void *mem_util_align_forward(void *ptr, u64 alignment);
#endif // !MEM_UTILS_H

23
mem/src/util/mem_utils.c Normal file
View File

@ -0,0 +1,23 @@
#include "mem_utils.h"
#include "aliases.h"
#include <assert.h>
#include <stdbool.h>
internal bool is_power_of_two(u64 num) { return (num & (num - 1)) == 0; }
void *mem_util_align_forward(void *ptr, u64 alignment) {
assert(is_power_of_two(alignment));
uptr p = (uptr)ptr;
uptr align = (uptr)alignment;
// Similar to p % align, but it's a faster implementation that works fine
// because align is guaranteed to be a power of 2
uptr modulo = p & (align - 1);
if (modulo != 0) {
p += align - modulo;
}
return (void *)p;
}