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