10 void DebugPrintf(const char *szFormat, ...)
\r
15 va_start(ArgList, szFormat);
\r
16 vsprintf(szStr, szFormat, ArgList);
\r
18 OutputDebugString(szStr);
\r
23 static unsigned long nan[2]={0xffffffff, 0x7fffffff};
\r
24 double dNAN = *( double* )nan;
\r
25 assert(_isnan(dNAN));
\r
29 double g_dNAN = GetNAN();
\r
31 void chkmem(const char szMsg[])
\r
33 if (!_CrtCheckMemory())
\r
34 Quit("chkmem(%s)", szMsg);
\r
39 if (IsDebuggerPresent())
\r
43 const char *GetCmdLine()
\r
45 return GetCommandLine();
\r
48 static unsigned uPeakMemUseBytes;
\r
50 double GetRAMSizeMB()
\r
53 GlobalMemoryStatus(&MS);
\r
54 return MS.dwAvailPhys/1e6;
\r
57 double GetMemUseMB()
\r
59 HANDLE hProc = GetCurrentProcess();
\r
60 PROCESS_MEMORY_COUNTERS PMC;
\r
61 BOOL bOk = GetProcessMemoryInfo(hProc, &PMC, sizeof(PMC));
\r
63 //printf("GetMemUseMB()\n");
\r
64 //printf("%12u PageFaultCount\n", (unsigned) PMC.PageFaultCount);
\r
65 //printf("%12u PagefileUsage\n", (unsigned) PMC.PagefileUsage);
\r
66 //printf("%12u PeakPagefileUsage\n", (unsigned) PMC.PeakPagefileUsage);
\r
67 //printf("%12u WorkingSetSize\n", (unsigned) PMC.WorkingSetSize);
\r
68 //printf("%12u PeakWorkingSetSize\n", (unsigned) PMC.PeakWorkingSetSize);
\r
69 //printf("%12u QuotaPagedPoolUsage\n", (unsigned) PMC.QuotaPagedPoolUsage);
\r
70 //printf("%12u QuotaPeakPagedPoolUsage\n", (unsigned) PMC.QuotaPeakPagedPoolUsage);
\r
71 //printf("%12u QuotaNonPagedPoolUsage\n", (unsigned) PMC.QuotaNonPagedPoolUsage);
\r
72 //printf("%12u QuotaPeakNonPagedPoolUsage\n", (unsigned) PMC.QuotaPeakNonPagedPoolUsage);
\r
73 unsigned uBytes = (unsigned) PMC.WorkingSetSize;
\r
74 if (uBytes > uPeakMemUseBytes)
\r
75 uPeakMemUseBytes = uBytes;
\r
76 return (uBytes + 500000.0)/1000000.0;
\r
79 double GetPeakMemUseMB()
\r
81 return (uPeakMemUseBytes + 500000.0)/1000000.0;
\r
86 // Side-effect: sets peak usage in uPeakMemUseBytes
\r
93 const char *e = getenv("CPUGHZ");
\r
96 if (dGHz < 0.1 || dGHz > 1000.0)
\r
97 Quit("Invalid value '%s' for environment variable CPUGHZ", e);
\r