8
#include <sys/sysctl.h>
9
#include <sys/socket.h>
11
#include <mach/vm_param.h>
12
#include <netinet/in.h>
13
#include <netinet/icmp6.h>
14
#include <sys/vmmeter.h>
16
#include <mach/task_info.h>
17
#include <mach/task.h>
18
#include <mach/mach_init.h>
19
#include <mach/vm_statistics.h>
21
const double DEFAULT_RAM = 1e9;
22
const double DEFAULT_MEM_USE = 1e6;
26
static unsigned long nan[2]={0xffffffff, 0x7fffffff};
27
double dNAN = *( double* )nan;
31
double g_dNAN = GetNAN();
36
static double CACHED_RAM = 0;
40
uint64_t MemPages = 0;
41
size_t Len = sizeof(MemPages);
42
if (sysctlbyname("hw.memsize", &MemPages, &Len, NULL, 0) < 0)
44
return (double) MemPages;
49
return GetRAMSize()/1e6;
52
static double g_uPeakMemUseBytes;
54
double GetMaxMemUseBytes()
56
return g_uPeakMemUseBytes;
59
double GetPeakMemUseBytes()
61
return GetMaxMemUseBytes();
64
double GetMemUseBytes()
66
task_t mytask = mach_task_self();
67
struct task_basic_info ti;
68
memset((void *) &ti, 0, sizeof(ti));
69
mach_msg_type_number_t count = TASK_BASIC_INFO_COUNT;
70
kern_return_t ok = task_info(mytask, TASK_BASIC_INFO, (task_info_t) &ti, &count);
71
if (ok == KERN_INVALID_ARGUMENT)
72
return DEFAULT_MEM_USE;
74
if (ok != KERN_SUCCESS)
75
return DEFAULT_MEM_USE;
77
double uBytes = (double ) ti.resident_size;
78
if (uBytes > g_uPeakMemUseBytes)
79
g_uPeakMemUseBytes = uBytes;
85
return GetMemUseBytes()/1e6;