%PDF- %PDF-
| Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/ |
| Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/heap/large-page.h |
// Copyright 2023 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_HEAP_LARGE_PAGE_H_
#define V8_HEAP_LARGE_PAGE_H_
#include "src/heap/memory-chunk.h"
namespace v8 {
namespace internal {
class LargePage : public MemoryChunk {
public:
// A limit to guarantee that we do not overflow typed slot offset in the old
// to old remembered set. Note that this limit is higher than what assembler
// already imposes on x64 and ia32 architectures.
static constexpr int kMaxCodePageSize = 512 * MB;
static LargePage* cast(MemoryChunk* chunk) {
DCHECK_IMPLIES(chunk, chunk->IsLargePage());
return static_cast<LargePage*>(chunk);
}
static LargePage* cast(BasicMemoryChunk* chunk) {
return cast(MemoryChunk::cast(chunk));
}
static LargePage* FromHeapObject(Tagged<HeapObject> o) {
DCHECK(!V8_ENABLE_THIRD_PARTY_HEAP_BOOL);
return cast(MemoryChunk::FromHeapObject(o));
}
LargePage(Heap* heap, BaseSpace* space, size_t chunk_size, Address area_start,
Address area_end, VirtualMemory reservation,
Executability executable);
Tagged<HeapObject> GetObject() const {
return HeapObject::FromAddress(area_start());
}
LargePage* next_page() { return LargePage::cast(list_node_.next()); }
const LargePage* next_page() const {
return static_cast<const LargePage*>(list_node_.next());
}
void ClearOutOfLiveRangeSlots(Address free_start);
private:
static LargePage* Initialize(Heap* heap, MemoryChunk* chunk,
Executability executable);
friend class MemoryAllocator;
};
static_assert(sizeof(LargePage) <= MemoryChunk::kHeaderSize);
} // namespace internal
namespace base {
// Define special hash function for page pointers, to be used with std data
// structures, e.g. std::unordered_set<LargePage*, base::hash<LargePage*>
template <>
struct hash<i::LargePage*> : hash<i::BasicMemoryChunk*> {};
template <>
struct hash<const i::LargePage*> : hash<const i::BasicMemoryChunk*> {};
} // namespace base
} // namespace v8
#endif // V8_HEAP_LARGE_PAGE_H_