mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Change to HeapAlloc et al on Windows
This commit is contained in:
+34
-1
@@ -12,6 +12,21 @@
|
|||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
gb_inline i64 align_formula(i64 size, i64 align) {
|
||||||
|
if (align > 0) {
|
||||||
|
i64 result = size + align-1;
|
||||||
|
return result - result%align;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
gb_inline isize align_formula_isize(isize size, isize align) {
|
||||||
|
if (align > 0) {
|
||||||
|
isize result = size + align-1;
|
||||||
|
return result - result%align;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
GB_ALLOCATOR_PROC(heap_allocator_proc);
|
GB_ALLOCATOR_PROC(heap_allocator_proc);
|
||||||
|
|
||||||
gbAllocator heap_allocator(void) {
|
gbAllocator heap_allocator(void) {
|
||||||
@@ -26,13 +41,18 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) {
|
|||||||
void *ptr = NULL;
|
void *ptr = NULL;
|
||||||
gb_unused(allocator_data);
|
gb_unused(allocator_data);
|
||||||
gb_unused(old_size);
|
gb_unused(old_size);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TODO(bill): Throughly test!
|
// TODO(bill): Throughly test!
|
||||||
switch (type) {
|
switch (type) {
|
||||||
#if defined(GB_COMPILER_MSVC)
|
#if defined(GB_COMPILER_MSVC)
|
||||||
|
#if 0
|
||||||
case gbAllocation_Alloc:
|
case gbAllocation_Alloc:
|
||||||
ptr = _aligned_malloc(size, alignment);
|
ptr = _aligned_malloc(size, alignment);
|
||||||
if (flags & gbAllocatorFlag_ClearToZero)
|
if (flags & gbAllocatorFlag_ClearToZero) {
|
||||||
gb_zero_size(ptr, size);
|
gb_zero_size(ptr, size);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case gbAllocation_Free:
|
case gbAllocation_Free:
|
||||||
_aligned_free(old_memory);
|
_aligned_free(old_memory);
|
||||||
@@ -40,6 +60,19 @@ GB_ALLOCATOR_PROC(heap_allocator_proc) {
|
|||||||
case gbAllocation_Resize:
|
case gbAllocation_Resize:
|
||||||
ptr = _aligned_realloc(old_memory, size, alignment);
|
ptr = _aligned_realloc(old_memory, size, alignment);
|
||||||
break;
|
break;
|
||||||
|
#else
|
||||||
|
case gbAllocation_Alloc:
|
||||||
|
// TODO(bill): Make sure this is aligned correctly
|
||||||
|
// ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, align_formula_isize(size, alignment));
|
||||||
|
ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, align_formula_isize(size, alignment));
|
||||||
|
break;
|
||||||
|
case gbAllocation_Free:
|
||||||
|
HeapFree(GetProcessHeap(), 0, old_memory);
|
||||||
|
break;
|
||||||
|
case gbAllocation_Resize:
|
||||||
|
ptr = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, old_memory, align_formula_isize(size, alignment));
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#elif defined(GB_SYSTEM_LINUX)
|
#elif defined(GB_SYSTEM_LINUX)
|
||||||
// TODO(bill): *nix version that's decent
|
// TODO(bill): *nix version that's decent
|
||||||
|
|||||||
+1
-2
@@ -1285,7 +1285,6 @@ irDefer ir_add_defer_instr(irProcedure *proc, isize scope_index, irValue *instr)
|
|||||||
|
|
||||||
irValue *ir_add_module_constant(irModule *m, Type *type, ExactValue value) {
|
irValue *ir_add_module_constant(irModule *m, Type *type, ExactValue value) {
|
||||||
gbAllocator a = m->allocator;
|
gbAllocator a = m->allocator;
|
||||||
// gbAllocator a = gb_heap_allocator();
|
|
||||||
|
|
||||||
if (is_type_slice(type)) {
|
if (is_type_slice(type)) {
|
||||||
ast_node(cl, CompoundLit, value.value_compound);
|
ast_node(cl, CompoundLit, value.value_compound);
|
||||||
@@ -1321,7 +1320,7 @@ irValue *ir_add_global_string_array(irModule *m, String string) {
|
|||||||
// TODO(bill): Should this use the arena allocator or the heap allocator?
|
// TODO(bill): Should this use the arena allocator or the heap allocator?
|
||||||
// Strings could be huge!
|
// Strings could be huge!
|
||||||
// gbAllocator a = m->allocator;
|
// gbAllocator a = m->allocator;
|
||||||
gbAllocator a = gb_heap_allocator();
|
gbAllocator a = heap_allocator();
|
||||||
|
|
||||||
isize max_len = 6+8+1;
|
isize max_len = 6+8+1;
|
||||||
u8 *str = cast(u8 *)gb_alloc_array(a, u8, max_len);
|
u8 *str = cast(u8 *)gb_alloc_array(a, u8, max_len);
|
||||||
|
|||||||
+1
-7
@@ -1782,13 +1782,7 @@ void type_path_pop(TypePath *tp) {
|
|||||||
i64 type_size_of_internal (gbAllocator allocator, Type *t, TypePath *path);
|
i64 type_size_of_internal (gbAllocator allocator, Type *t, TypePath *path);
|
||||||
i64 type_align_of_internal(gbAllocator allocator, Type *t, TypePath *path);
|
i64 type_align_of_internal(gbAllocator allocator, Type *t, TypePath *path);
|
||||||
|
|
||||||
i64 align_formula(i64 size, i64 align) {
|
|
||||||
if (align > 0) {
|
|
||||||
i64 result = size + align-1;
|
|
||||||
return result - result%align;
|
|
||||||
}
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
i64 type_size_of(gbAllocator allocator, Type *t) {
|
i64 type_size_of(gbAllocator allocator, Type *t) {
|
||||||
if (t == nullptr) {
|
if (t == nullptr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user