// Copyright 2015 The Gemmlowp Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // allocator.h: a buffer allocator that allows avoiding most of the // malloc/free overhead, by: // 1. Requiring all N allocations to be reserved in advance, and // then commited at once, turning N allocations into 1. // 2. Being persistent, the allocated storage is reused across commits, // and only reallocated as needed when the commit size gets larger. // // This is driven by Android-specific needs: // 1. On Android, the default (Bionic) allocator tends to aggressively // unmap pages, which means that malloc/free can be surprisingly expensive. // 2. On Android, stack allocations with alloca() can't be as large as on // desktop platforms. // // General usage: // 1. Reserve blocks by calling Reserve(), which returns a Handle. // 2. Call Commit() once. // 3. Now it is possible to get pointers to allocated buffers by calling // GetPointer(). // 4. Call Decommit() once. // 5. The allocator is now reverted to its original state, except that // it retained its allocated storage, so the next Commit() will be faster. // The allocated storage is only freed when the Allocator object is // destroyed. #ifndef GEMMLOWP_INTERNAL_ALLOCATOR_H_ #define GEMMLOWP_INTERNAL_ALLOCATOR_H_ #include "common.h" gemmlowp // namespace gemmlowp #endif // GEMMLOWP_INTERNAL_ALLOCATOR_H_