1 // Copyright 2023 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 15 #include "pw_allocator/libc_allocator.h" 16 17 #include <algorithm> 18 #include <cstddef> 19 #include <cstdlib> 20 #include <cstring> 21 22 namespace pw::allocator { 23 DoAllocate(Layout layout)24void* LibCAllocator::DoAllocate(Layout layout) { 25 // TODO: b/301930507 - `aligned_alloc` is not portable. Return null for larger 26 // allocations for now. 27 return layout.alignment() <= alignof(std::max_align_t) 28 ? std::malloc(layout.size()) 29 : nullptr; 30 } 31 DoDeallocate(void * ptr)32void LibCAllocator::DoDeallocate(void* ptr) { std::free(ptr); } 33 DoReallocate(void * ptr,Layout new_layout)34void* LibCAllocator::DoReallocate(void* ptr, Layout new_layout) { 35 // TODO: b/301930507 - `aligned_alloc` is not portable. Return null for larger 36 // allocations for now. 37 return new_layout.alignment() <= alignof(std::max_align_t) 38 ? std::realloc(ptr, new_layout.size()) 39 : nullptr; 40 } 41 GetLibCAllocator()42LibCAllocator& GetLibCAllocator() { 43 static LibCAllocator kInstance; 44 return kInstance; 45 } 46 47 } // namespace pw::allocator 48