diff --git Source/WTF/wtf/RAMSize.cpp Source/WTF/wtf/RAMSize.cpp
index 5d34d3b..3dd516c 100644
--- Source/WTF/wtf/RAMSize.cpp
+++ Source/WTF/wtf/RAMSize.cpp
#include "StdLibExtras.h"
+#import <dispatch/dispatch.h>
+#import <mach/host_info.h>
+#import <mach/mach_error.h>
-#elif defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC
-#include <sys/sysinfo.h>
-#include <bmalloc/bmalloc.h>
static const size_t ramSizeGuess = 512 * MB;
static size_t computeRAMSize()
+#if PLATFORM(IOS_SIMULATOR)
+ // Pretend we have 512MB of memory to make cache sizes behave like on device.
+ host_basic_info_data_t hostInfo;
+ mach_port_t host = mach_host_self();
+ mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT;
+ kern_return_t r = host_info(host, HOST_BASIC_INFO, (host_info_t)&hostInfo, &count);
+ mach_port_deallocate(mach_task_self(), host);
+ if (r != KERN_SUCCESS) {
+ LOG_ERROR("%s : host_info(%d) : %s.\n", __FUNCTION__, r, mach_error_string(r));
+ if (hostInfo.max_mem > std::numeric_limits<size_t>::max())
+ return std::numeric_limits<size_t>::max();
+ size_t sizeAccordingToKernel = static_cast<size_t>(hostInfo.max_mem);
+ size_t multiple = 128 * MB;
+ // Round up the memory size to a multiple of 128MB because max_mem may not be exactly 512MB
+ // (for example) and we have code that depends on those boundaries.
+ return ((sizeAccordingToKernel + multiple - 1) / multiple) * multiple;
+ long pages = sysconf(_SC_PHYS_PAGES);
+ long pageSize = sysconf(_SC_PAGE_SIZE);
+ if (pages == -1 || pageSize == -1)
+ return pages * pageSize;
status.dwLength = sizeof(status);
bool result = GlobalMemoryStatusEx(&status);
return status.ullTotalPhys;
-#elif defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC
- return si.totalram * si.mem_unit;
-#error "Missing a platform specific way of determining the available RAM"
- return bmalloc::api::availableMemory();
@@ -77,4 +97,4 @@ size_t ramSize()