dlmalloc.rs 929 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. use core::alloc::{GlobalAlloc, Layout};
  2. use super::types::*;
  3. extern "C" {
  4. fn dlmalloc(bytes: size_t) -> *mut c_void;
  5. fn dlmemalign(alignment: size_t, bytes: size_t) -> *mut c_void;
  6. fn dlrealloc(oldmem: *mut c_void, bytes: size_t) -> *mut c_void;
  7. fn dlfree(mem: *mut c_void);
  8. }
  9. pub struct Allocator;
  10. unsafe impl<'a> GlobalAlloc for Allocator {
  11. unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
  12. alloc_align(layout.size(), layout.align()) as *mut u8
  13. }
  14. unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
  15. free(ptr as *mut c_void)
  16. }
  17. }
  18. pub unsafe fn alloc(size: usize) -> *mut c_void {
  19. dlmalloc(size)
  20. }
  21. pub unsafe fn alloc_align(size: usize, alignment: usize) -> *mut c_void {
  22. dlmemalign(alignment, size)
  23. }
  24. pub unsafe fn realloc(ptr: *mut c_void, size: size_t) -> *mut c_void {
  25. dlrealloc(ptr, size)
  26. }
  27. pub unsafe fn free(ptr: *mut c_void) {
  28. dlfree(ptr)
  29. }