commit 283b815f4980cb08a46acfa9ee46a82876cf2037
parent 8036f477203e487300fa94ab6cb662ae8e4a6699
Author: MikoĊaj Lenczewski <mblenczewski@gmail.com>
Date: Mon, 13 Feb 2023 00:35:25 +0000
Make mem_pool_resize() alignment-aware for MSVC _aligned_realloc
Diffstat:
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/include/utils.h b/include/utils.h
@@ -81,10 +81,14 @@ struct mem_pool {
};
static inline bool
-mem_pool_resize(struct mem_pool *self, u64 capacity) {
+mem_pool_resize(struct mem_pool *self, u64 alignment, u64 capacity) {
assert(self);
+#ifdef _WIN32
+ u8 *ptr = _aligned_realloc(self->ptr, capacity, alignment);
+#else
u8 *ptr = realloc(self->ptr, capacity);
+#endif
if (!ptr) return false;
self->ptr = ptr;
@@ -136,10 +140,11 @@ mem_pool_reset(struct mem_pool *self) {
}
static inline bool
-mem_pool_prealloc(struct mem_pool *self, u64 size) {
+mem_pool_prealloc(struct mem_pool *self, u64 alignment, u64 size) {
assert(self);
- return self->len + size <= self->cap || mem_pool_resize(self, self->len + size);
+ return self->len + size <= self->cap ||
+ mem_pool_resize(self, alignment, self->len + size);
}
static inline void *
@@ -152,7 +157,7 @@ mem_pool_alloc(struct mem_pool *self, u64 alignment, u64 size) {
u64 alignment_off = alignment - 1;
u64 aligned_len = (self->len + alignment_off) & ~alignment_off;
- if (!mem_pool_prealloc(self, (aligned_len - self->len) + size))
+ if (!mem_pool_prealloc(self, alignment, (aligned_len - self->len) + size))
return NULL;
void *ptr = self->ptr + aligned_len;