heap_allocator_orca.odin 763 B

1234567891011121314151617181920212223242526272829
  1. #+build orca
  2. #+private
  3. package runtime
  4. foreign {
  5. @(link_name="malloc") _orca_malloc :: proc "c" (size: int) -> rawptr ---
  6. @(link_name="calloc") _orca_calloc :: proc "c" (num, size: int) -> rawptr ---
  7. @(link_name="free") _orca_free :: proc "c" (ptr: rawptr) ---
  8. @(link_name="realloc") _orca_realloc :: proc "c" (ptr: rawptr, size: int) -> rawptr ---
  9. }
  10. _heap_alloc :: proc "contextless" (size: int, zero_memory := true) -> rawptr {
  11. if size <= 0 {
  12. return nil
  13. }
  14. if zero_memory {
  15. return _orca_calloc(1, size)
  16. } else {
  17. return _orca_malloc(size)
  18. }
  19. }
  20. _heap_resize :: proc "contextless" (ptr: rawptr, new_size: int) -> rawptr {
  21. return _orca_realloc(ptr, new_size)
  22. }
  23. _heap_free :: proc "contextless" (ptr: rawptr) {
  24. _orca_free(ptr)
  25. }