| Index: src/spaces.h
|
| diff --git a/src/spaces.h b/src/spaces.h
|
| index dc68ca58dd1c3fef57e5a030706208c1c80299ae..8ba99bd47216fc780abe32ad8dbff413b071e4c5 100644
|
| --- a/src/spaces.h
|
| +++ b/src/spaces.h
|
| @@ -331,6 +331,19 @@ class MemoryChunk {
|
| kFailureTag);
|
| }
|
|
|
| + VirtualMemory* reserved_memory() {
|
| + return &reservation_;
|
| + }
|
| +
|
| + void InitializeReservedMemory() {
|
| + reservation_.Reset();
|
| + }
|
| +
|
| + void set_reserved_memory(VirtualMemory* reservation) {
|
| + ASSERT_NOT_NULL(reservation);
|
| + reservation_.TakeControl(reservation);
|
| + }
|
| +
|
| bool scan_on_scavenge() { return IsFlagSet(SCAN_ON_SCAVENGE); }
|
| void initialize_scan_on_scavenge(bool scan) {
|
| if (scan) {
|
| @@ -454,7 +467,8 @@ class MemoryChunk {
|
|
|
| static const intptr_t kLiveBytesOffset =
|
| kPointerSize + kPointerSize + kPointerSize + kPointerSize +
|
| - kPointerSize + kPointerSize + kIntSize;
|
| + kPointerSize + kPointerSize + kPointerSize + kPointerSize +
|
| + kIntSize;
|
|
|
| static const size_t kSlotsBufferOffset = kLiveBytesOffset + kIntSize;
|
|
|
| @@ -553,6 +567,8 @@ class MemoryChunk {
|
| MemoryChunk* prev_chunk_;
|
| size_t size_;
|
| intptr_t flags_;
|
| + // If the chunk needs to remember its memory reservation, it is stored here.
|
| + VirtualMemory reservation_;
|
| // The identity of the owning space. This is tagged as a failure pointer, but
|
| // no failure can be in an object, so this can be distinguished from any entry
|
| // in a fixed array.
|
| @@ -885,15 +901,15 @@ class MemoryAllocator {
|
| Executability executable,
|
| Space* space);
|
|
|
| - Address AllocateAlignedMemory(const size_t requested,
|
| + Address ReserveAlignedMemory(size_t requested,
|
| + size_t alignment,
|
| + VirtualMemory* controller);
|
| + Address AllocateAlignedMemory(size_t requested,
|
| size_t alignment,
|
| Executability executable,
|
| - size_t* allocated_size);
|
| -
|
| - Address ReserveAlignedMemory(const size_t requested,
|
| - size_t alignment,
|
| - size_t* allocated_size);
|
| + VirtualMemory* controller);
|
|
|
| + void FreeMemory(VirtualMemory* reservation, Executability executable);
|
| void FreeMemory(Address addr, size_t size, Executability executable);
|
|
|
| // Commit a contiguous block of memory from the initial chunk. Assumes that
|
| @@ -1934,6 +1950,7 @@ class NewSpace : public Space {
|
| : Space(heap, NEW_SPACE, NOT_EXECUTABLE),
|
| to_space_(heap, kToSpace),
|
| from_space_(heap, kFromSpace),
|
| + reservation_(),
|
| inline_allocation_limit_step_(0) {}
|
|
|
| // Sets up the new space using the given chunk.
|
| @@ -2154,6 +2171,7 @@ class NewSpace : public Space {
|
| // The semispaces.
|
| SemiSpace to_space_;
|
| SemiSpace from_space_;
|
| + VirtualMemory reservation_;
|
| int pages_used_;
|
|
|
| // Start address and bit mask for containment testing.
|
|
|