1 use crate::alloc
::{GlobalAlloc, Layout, System}
;
3 use crate::sys_common
::alloc
::{realloc_fallback, MIN_ALIGN}
;
5 #[stable(feature = "alloc_system_type", since = "1.28.0")]
6 unsafe impl GlobalAlloc
for System
{
8 unsafe fn alloc(&self, layout
: Layout
) -> *mut u8 {
9 if layout
.align() <= MIN_ALIGN
&& layout
.align() <= layout
.size() {
10 libc
::malloc(layout
.size()) as *mut u8
12 libc
::aligned_alloc(layout
.align(), layout
.size()) as *mut u8
17 unsafe fn alloc_zeroed(&self, layout
: Layout
) -> *mut u8 {
18 if layout
.align() <= MIN_ALIGN
&& layout
.align() <= layout
.size() {
19 libc
::calloc(layout
.size(), 1) as *mut u8
21 let ptr
= self.alloc(layout
.clone());
23 ptr
::write_bytes(ptr
, 0, layout
.size());
30 unsafe fn dealloc(&self, ptr
: *mut u8, _layout
: Layout
) {
31 libc
::free(ptr
as *mut libc
::c_void
)
35 unsafe fn realloc(&self, ptr
: *mut u8, layout
: Layout
, new_size
: usize) -> *mut u8 {
36 if layout
.align() <= MIN_ALIGN
&& layout
.align() <= new_size
{
37 libc
::realloc(ptr
as *mut libc
::c_void
, new_size
) as *mut u8
39 realloc_fallback(self, ptr
, layout
, new_size
)