// // Copyright 2019 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // PoolAlloc.h: // Defines the class interface for PoolAllocator. // #ifndef COMMON_POOLALLOC_H_ #define COMMON_POOLALLOC_H_ #if !defined(NDEBUG) #define ANGLE_POOL_ALLOC_GUARD_BLOCKS … #endif // // This header defines an allocator that can be used to efficiently // allocate a large number of small requests for heap memory, with the // intention that they are not individually deallocated, but rather // collectively deallocated at one time. // // This simultaneously // // * Makes each individual allocation much more efficient; the // typical allocation is trivial. // * Completely avoids the cost of doing individual deallocation. // * Saves the trouble of tracking down and plugging a large class of leaks. // // Individual classes can use this allocator by supplying their own // new and delete methods. // #include "angleutils.h" #include "common/debug.h" namespace angle { class Allocation; class PageHeader; // // There are several stacks. One is to track the pushing and popping // of the user, and not yet implemented. The others are simply a // repositories of free pages or used pages. // // Page stacks are linked together with a simple header at the beginning // of each allocation obtained from the underlying OS. Multi-page allocations // are returned to the OS. Individual page allocations are kept for future // re-use. // // The "page size" used is not, nor must it match, the underlying OS // page size. But, having it be about that size or equal to a set of // pages is likely most optimal. // class PoolAllocator : angle::NonCopyable { … }; } // namespace angle #endif // COMMON_POOLALLOC_H_