1 // Copyright 2017 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_BASE_PAGE_ALLOCATOR_H_ 6 #define V8_BASE_PAGE_ALLOCATOR_H_ 7 8 #include <memory> 9 10 #include "include/v8-platform.h" 11 #include "src/base/base-export.h" 12 #include "src/base/compiler-specific.h" 13 14 namespace v8 { 15 namespace base { 16 17 class SharedMemory; 18 19 class V8_BASE_EXPORT PageAllocator NON_EXPORTED_BASE(::v8::PageAllocator)20 : public NON_EXPORTED_BASE(::v8::PageAllocator) { 21 public: 22 PageAllocator(); 23 ~PageAllocator() override = default; 24 25 size_t AllocatePageSize() override { return allocate_page_size_; } 26 27 size_t CommitPageSize() override { return commit_page_size_; } 28 29 void SetRandomMmapSeed(int64_t seed) override; 30 31 void* GetRandomMmapAddr() override; 32 33 void* AllocatePages(void* hint, size_t size, size_t alignment, 34 PageAllocator::Permission access) override; 35 36 bool CanAllocateSharedPages() override; 37 38 std::unique_ptr<v8::PageAllocator::SharedMemory> AllocateSharedPages( 39 size_t size, const void* original_address) override; 40 41 bool FreePages(void* address, size_t size) override; 42 43 bool ReleasePages(void* address, size_t size, size_t new_size) override; 44 45 bool SetPermissions(void* address, size_t size, 46 PageAllocator::Permission access) override; 47 48 bool DiscardSystemPages(void* address, size_t size) override; 49 50 bool DecommitPages(void* address, size_t size) override; 51 52 private: 53 friend class v8::base::SharedMemory; 54 55 void* RemapShared(void* old_address, void* new_address, size_t size); 56 57 const size_t allocate_page_size_; 58 const size_t commit_page_size_; 59 }; 60 61 } // namespace base 62 } // namespace v8 63 #endif // V8_BASE_PAGE_ALLOCATOR_H_ 64