3 #if defined(__linux__)
\r
4 #include <sys/time.h>
\r
5 #include <sys/resource.h>
\r
11 const int ONE_MB = 1000000;
\r
12 const int MEM_WARNING_THRESHOLD = 20*ONE_MB;
\r
16 static unsigned long nan[2]={0xffffffff, 0x7fffffff};
\r
17 double dNAN = *( double* )nan;
\r
21 double g_dNAN = GetNAN();
\r
23 void chkmem(const char szMsg[])
\r
25 //assert(_CrtCheckMemory());
\r
33 static char szCmdLine[4096];
\r
35 void *ptrStartBreak = sbrk(0);
\r
37 const char *GetCmdLine()
\r
42 double GetMemUseMB()
\r
44 static char statm[64];
\r
45 static int PageSize;
\r
48 PageSize = sysconf(_SC_PAGESIZE);
\r
49 pid_t pid = getpid();
\r
50 sprintf(statm, "/proc/%d/statm", (int) pid);
\r
53 int fd = open(statm, O_RDONLY);
\r
57 int n = read(fd, Buffer, sizeof(Buffer) - 1);
\r
63 static bool Warned = false;
\r
67 Warning("*Warning* Cannot read %s errno=%d %s",
\r
68 statm, errno, strerror(errno));
\r
73 int Pages = atoi(Buffer);
\r
75 return ((double) Pages * (double) PageSize)/1e6;
\r
78 void SaveCmdLine(int argc, char *argv[])
\r
80 for (int i = 0; i < argc; ++i)
\r
83 strcat(szCmdLine, " ");
\r
84 strcat(szCmdLine, argv[i]);
\r
88 double dPeakMemUseMB = 0;
\r
90 double GetPeakMemUseMB()
\r
93 return dPeakMemUseMB;
\r
99 const char *e = getenv("CPUGHZ");
\r
107 double dMB = GetMemUseMB();
\r
108 if (dMB > dPeakMemUseMB)
\r
109 dPeakMemUseMB = dMB;
\r
112 double GetRAMSizeMB()
\r
114 const double DEFAULT_RAM = 500;
\r
115 static double RAMMB = 0;
\r
119 int fd = open("/proc/meminfo", O_RDONLY);
\r
122 static bool Warned = false;
\r
126 Warning("*Warning* Cannot open /proc/meminfo errno=%d %s",
\r
127 errno, strerror(errno));
\r
129 return DEFAULT_RAM;
\r
132 int n = read(fd, Buffer, sizeof(Buffer) - 1);
\r
138 static bool Warned = false;
\r
142 Warning("*Warning* Cannot read /proc/meminfo errno=%d %s",
\r
143 errno, strerror(errno));
\r
145 return DEFAULT_RAM;
\r
148 char *pMem = strstr(Buffer, "MemTotal: ");
\r
151 static bool Warned = false;
\r
155 Warning("*Warning* 'MemTotal:' not found in /proc/meminfo");
\r
157 return DEFAULT_RAM;
\r
159 int Bytes = atoi(pMem+9)*1000;
\r
160 return ((double) Bytes)/1e6;
\r