// Get memory status // Parameters: // memory_load - A number between 0 and 100 that specifies the approximate percentage of physical memory // that is in use (0 indicates no memory use and 100 indicates full memory use). // available_physical - The amount of physical memory currently available, in bytes. // available_page_file - The maximum amount of memory the current process can commit, in bytes. void GCToOSInterface::GetMemoryStatus(uint32_t* memory_load, uint64_t* available_physical, uint64_t* available_page_file) { if (memory_load != nullptr || available_physical != nullptr) { uint64_t total = GetPhysicalMemoryLimit(); uint64_t available = 0; uint32_t load = 0; // Get the physical memory in use - from it, we can get the physical memory available. // We do this only when we have the total physical memory available. if (total > 0) { available = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGE_SIZE); uint64_t used = total - available; load = (uint32_t)((used * 100) / total); } if (memory_load != nullptr) *memory_load = load; if (available_physical != nullptr) *available_physical = available; } if (available_page_file != nullptr) *available_page_file = 0; }
// Get memory status // Parameters: // memory_load - A number between 0 and 100 that specifies the approximate percentage of physical memory // that is in use (0 indicates no memory use and 100 indicates full memory use). // available_physical - The amount of physical memory currently available, in bytes. // available_page_file - The maximum amount of memory the current process can commit, in bytes. void GCToOSInterface::GetMemoryStatus(uint32_t* memory_load, uint64_t* available_physical, uint64_t* available_page_file) { if (memory_load != nullptr || available_physical != nullptr) { uint64_t total = GetPhysicalMemoryLimit(); uint64_t available = 0; uint32_t load = 0; size_t used; // Get the physical memory in use - from it, we can get the physical memory available. // We do this only when we have the total physical memory available. if (total > 0 && GetWorkingSetSize(&used)) { available = total > used ? total-used : 0; load = (uint32_t)(((float)used * 100) / (float)total); } if (memory_load != nullptr) *memory_load = load; if (available_physical != nullptr) *available_physical = available; } if (available_page_file != nullptr) *available_page_file = 0; }