| 75 |
|
#endif |
| 76 |
|
|
| 77 |
|
/* Return the total amount of physical memory. */ |
| 78 |
< |
double |
| 78 |
> |
RealType |
| 79 |
|
physmem_total () |
| 80 |
|
{ |
| 81 |
|
#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE |
| 82 |
|
{ /* This works on linux-gnu, solaris2 and cygwin. */ |
| 83 |
< |
double pages = sysconf (_SC_PHYS_PAGES); |
| 84 |
< |
double pagesize = sysconf (_SC_PAGESIZE); |
| 83 |
> |
RealType pages = sysconf (_SC_PHYS_PAGES); |
| 84 |
> |
RealType pagesize = sysconf (_SC_PAGESIZE); |
| 85 |
|
if (0 <= pages && 0 <= pagesize) |
| 86 |
|
return pages * pagesize; |
| 87 |
|
} |
| 92 |
|
struct pst_static pss; |
| 93 |
|
if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)) |
| 94 |
|
{ |
| 95 |
< |
double pages = pss.physical_memory; |
| 96 |
< |
double pagesize = pss.page_size; |
| 95 |
> |
RealType pages = pss.physical_memory; |
| 96 |
> |
RealType pagesize = pss.page_size; |
| 97 |
|
if (0 <= pages && 0 <= pagesize) |
| 98 |
|
return pages * pagesize; |
| 99 |
|
} |
| 105 |
|
struct rminfo realmem; |
| 106 |
|
if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) |
| 107 |
|
{ |
| 108 |
< |
double pagesize = sysconf (_SC_PAGESIZE); |
| 109 |
< |
double pages = realmem.physmem; |
| 108 |
> |
RealType pagesize = sysconf (_SC_PAGESIZE); |
| 109 |
> |
RealType pages = realmem.physmem; |
| 110 |
|
if (0 <= pages && 0 <= pagesize) |
| 111 |
|
return pages * pagesize; |
| 112 |
|
} |
| 120 |
|
if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem), |
| 121 |
|
NULL, NULL, NULL) == 1) |
| 122 |
|
{ |
| 123 |
< |
double kbytes = physmem; |
| 123 |
> |
RealType kbytes = physmem; |
| 124 |
|
|
| 125 |
|
if (0 <= kbytes) |
| 126 |
|
return kbytes * 1024.0; |
| 136 |
|
|
| 137 |
|
if (sysctl (mib, 2, &physmem, &len, NULL, 0) == 0 |
| 138 |
|
&& len == sizeof (physmem)) |
| 139 |
< |
return (double) physmem; |
| 139 |
> |
return (RealType) physmem; |
| 140 |
|
} |
| 141 |
|
#endif |
| 142 |
|
|
| 160 |
|
lms_ex.dwLength = sizeof lms_ex; |
| 161 |
|
if (!pfnex (&lms_ex)) |
| 162 |
|
return 0.0; |
| 163 |
< |
return (double) lms_ex.ullTotalPhys; |
| 163 |
> |
return (RealType) lms_ex.ullTotalPhys; |
| 164 |
|
} |
| 165 |
|
|
| 166 |
|
/* Fall back to GlobalMemoryStatus which is always available. |
| 169 |
|
{ |
| 170 |
|
MEMORYSTATUS ms; |
| 171 |
|
GlobalMemoryStatus (&ms); |
| 172 |
< |
return (double) ms.dwTotalPhys; |
| 172 |
> |
return (RealType) ms.dwTotalPhys; |
| 173 |
|
} |
| 174 |
|
} |
| 175 |
|
#endif |
| 179 |
|
} |
| 180 |
|
|
| 181 |
|
/* Return the amount of physical memory available. */ |
| 182 |
< |
double |
| 182 |
> |
RealType |
| 183 |
|
physmem_available () |
| 184 |
|
{ |
| 185 |
|
#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE |
| 186 |
|
{ /* This works on linux-gnu, solaris2 and cygwin. */ |
| 187 |
< |
double pages = sysconf (_SC_AVPHYS_PAGES); |
| 188 |
< |
double pagesize = sysconf (_SC_PAGESIZE); |
| 187 |
> |
RealType pages = sysconf (_SC_AVPHYS_PAGES); |
| 188 |
> |
RealType pagesize = sysconf (_SC_PAGESIZE); |
| 189 |
|
if (0 <= pages && 0 <= pagesize) |
| 190 |
|
return pages * pagesize; |
| 191 |
|
} |
| 198 |
|
if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0) |
| 199 |
|
&& 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0)) |
| 200 |
|
{ |
| 201 |
< |
double pages = psd.psd_free; |
| 202 |
< |
double pagesize = pss.page_size; |
| 201 |
> |
RealType pages = psd.psd_free; |
| 202 |
> |
RealType pagesize = pss.page_size; |
| 203 |
|
if (0 <= pages && 0 <= pagesize) |
| 204 |
|
return pages * pagesize; |
| 205 |
|
} |
| 211 |
|
struct rminfo realmem; |
| 212 |
|
if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) |
| 213 |
|
{ |
| 214 |
< |
double pagesize = sysconf (_SC_PAGESIZE); |
| 215 |
< |
double pages = realmem.availrmem; |
| 214 |
> |
RealType pagesize = sysconf (_SC_PAGESIZE); |
| 215 |
> |
RealType pages = realmem.availrmem; |
| 216 |
|
if (0 <= pages && 0 <= pagesize) |
| 217 |
|
return pages * pagesize; |
| 218 |
|
} |
| 225 |
|
|
| 226 |
|
if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1) |
| 227 |
|
{ |
| 228 |
< |
double pages = vmstats.free_count; |
| 229 |
< |
double pagesize = vmstats.pagesize; |
| 228 |
> |
RealType pages = vmstats.free_count; |
| 229 |
> |
RealType pagesize = vmstats.pagesize; |
| 230 |
|
|
| 231 |
|
if (0 <= pages && 0 <= pagesize) |
| 232 |
|
return pages * pagesize; |
| 242 |
|
|
| 243 |
|
if (sysctl (mib, 2, &usermem, &len, NULL, 0) == 0 |
| 244 |
|
&& len == sizeof (usermem)) |
| 245 |
< |
return (double) usermem; |
| 245 |
> |
return (RealType) usermem; |
| 246 |
|
} |
| 247 |
|
#endif |
| 248 |
|
|
| 261 |
|
lms_ex.dwLength = sizeof lms_ex; |
| 262 |
|
if (!pfnex (&lms_ex)) |
| 263 |
|
return 0.0; |
| 264 |
< |
return (double) lms_ex.ullAvailPhys; |
| 264 |
> |
return (RealType) lms_ex.ullAvailPhys; |
| 265 |
|
} |
| 266 |
|
|
| 267 |
|
/* Fall back to GlobalMemoryStatus which is always available. |
| 270 |
|
{ |
| 271 |
|
MEMORYSTATUS ms; |
| 272 |
|
GlobalMemoryStatus (&ms); |
| 273 |
< |
return (double) ms.dwAvailPhys; |
| 273 |
> |
return (RealType) ms.dwAvailPhys; |
| 274 |
|
} |
| 275 |
|
} |
| 276 |
|
#endif |