// Copyright 2024 the V8 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. #ifndef V8_COMMON_SEGMENTED_TABLE_H_ #define V8_COMMON_SEGMENTED_TABLE_H_ #include "include/v8-internal.h" #include "src/base/macros.h" #include "src/common/code-memory-access.h" namespace v8 { namespace internal { /** * A thread-safe table with a fixed maximum size split into segments. * * The table provides thread-safe methods to allocate and free of segments and * an inline freelist implementation. Allocation and Freeing of entries is * implemented in subclasses since it depends on if the table is manually * managed or GCed. * * For the purpose of memory management, the table is partitioned into Segments * (for example 64kb memory chunks) that are grouped together in "Spaces". All * segments in a space share a freelist, and so entry allocation and garbage * collection happen on the level of spaces. * * The Entry type defines how the freelist is represented. For that, it must * implement the following methods: * - void MakeFreelistEntry(uint32_t next_entry_index) * - uint32_t GetNextFreelistEntry() */ template <typename Entry, size_t size> class V8_EXPORT_PRIVATE SegmentedTable { … }; } // namespace internal } // namespace v8 #endif // V8_COMMON_SEGMENTED_TABLE_H_