Index: src/platform/virtual-memory.cc |
diff --git a/src/platform/virtual-memory.cc b/src/platform/virtual-memory.cc |
index 7e535424fd7d17a43e1490d377d9d39d264c2488..f72bc9054c392daa7f5837daee76563eb81678fd 100644 |
--- a/src/platform/virtual-memory.cc |
+++ b/src/platform/virtual-memory.cc |
@@ -158,7 +158,7 @@ void* VirtualMemory::ReserveRegion(size_t size, size_t* size_return) { |
if (size < 64 * KB) { |
size = 64 * KB; |
} |
- size = RoundUp(size, GetAllocationGranularity()); |
+ size = RoundUp(size, GetPageSize()); |
LPVOID address = NULL; |
// Try and randomize the allocation address (up to three attempts). |
for (unsigned attempts = 0; address == NULL && attempts < 3; ++attempts) { |
@@ -189,13 +189,14 @@ void* VirtualMemory::ReserveRegion(size_t size, |
ASSERT_NE(NULL, size_return); |
ASSERT(IsAligned(alignment, GetAllocationGranularity())); |
- size_t reserved_size; |
+ size_t reserved_size = RoundUp(size + alignment, GetAllocationGranularity()); |
Address reserved_base = static_cast<Address>( |
- ReserveRegion(size + alignment, &reserved_size)); |
+ ReserveRegion(reserved_size, &reserved_size)); |
if (reserved_base == NULL) { |
return NULL; |
} |
ASSERT_LE(size, reserved_size); |
+ ASSERT_LE(size + alignment, reserved_size); |
ASSERT(IsAligned(reserved_size, GetPageSize())); |
// Try reducing the size by freeing and then reallocating a specific area. |
@@ -218,6 +219,7 @@ void* VirtualMemory::ReserveRegion(size_t size, |
} |
// Resizing failed, just go with a bigger area. |
+ ASSERT(IsAligned(reserved_size, GetAllocationGranularity())); |
return ReserveRegion(reserved_size, size_return); |
} |
@@ -291,6 +293,7 @@ size_t VirtualMemory::GetAllocationGranularity() { |
allocation_granularity = system_info.dwAllocationGranularity; |
MemoryBarrier(); |
} |
+ ASSERT_GE(allocation_granularity, GetPageSize()); |
return allocation_granularity; |
} |