/* Copyright 2017 The TensorFlow 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. ==============================================================================*/ #ifndef TENSORFLOW_LITE_SIMPLE_MEMORY_ARENA_H_ #define TENSORFLOW_LITE_SIMPLE_MEMORY_ARENA_H_ #include <cstddef> #include <cstdint> #include <string> #include <vector> #include "tensorflow/lite/core/c/common.h" namespace tflite { // This little structure holds the offset and the size for a dynamic memory // allocation in the memory arena as well as first_node and last_node that use // corresponding tensor. It means that continuous part of memory with this size // needs to be allocated before execution of operation in the first node and can // be deallocated after execution of the operation in the last_node. When the // arena is committed and the underlying buffer is set, the alloc can be // resolved into an actual memory pointer. struct ArenaAllocWithUsageInterval { … }; struct PointerAlignedPointerPair { … }; class ResizableAlignedBuffer { … }; // This small class is responsible for allocating, deallocating and reusing // dynamic memory from a common underlying buffer. The arena can be used in // scenarios when the pattern of memory allocations and deallocations is // repetitive, e.g. running NN inference in multiple iterations. Note that // zero-sized allocations are explicitly allowed, and will resolve to null. class SimpleMemoryArena { … }; } // namespace tflite #endif // TENSORFLOW_LITE_SIMPLE_MEMORY_ARENA_H_