Mercurial > hg > octave-shane > gnulib-hg
annotate lib/physmem.c @ 4554:5a1e7c84e9cd
Use three spaces, rather than tab, after '#'
in shell-script copyright notices.
Suggested by Bruno Haible.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 15 Aug 2003 18:04:34 +0000 |
parents | e98bdaad6174 |
children | c7ad68a45173 |
rev | line source |
---|---|
3064 | 1 /* Calculate the size of physical memory. |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
2 Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. |
3064 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with this program; if not, write to the Free Software Foundation, | |
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |
17 | |
18 /* Written by Paul Eggert. */ | |
19 | |
20 #if HAVE_CONFIG_H | |
21 # include <config.h> | |
22 #endif | |
23 | |
24 #include "physmem.h" | |
25 | |
26 #if HAVE_UNISTD_H | |
27 # include <unistd.h> | |
28 #endif | |
29 | |
3607
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
30 #if HAVE_SYS_PSTAT_H |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
31 # include <sys/pstat.h> |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
32 #endif |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
33 |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
34 #if HAVE_SYS_SYSMP_H |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
35 # include <sys/sysmp.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
36 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
37 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
38 #if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
39 # include <sys/sysinfo.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
40 # include <machine/hal_sysinfo.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
41 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
42 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
43 #if HAVE_SYS_TABLE_H |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
44 # include <sys/table.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
45 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
46 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
47 #include <sys/types.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
48 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
49 #if HAVE_SYS_PARAM_H |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
50 # include <sys/param.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
51 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
52 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
53 #if HAVE_SYS_SYSCTL_H |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
54 # include <sys/sysctl.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
55 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
56 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
57 #if HAVE_SYS_SYSTEMCFG_H |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
58 # include <sys/systemcfg.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
59 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
60 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
61 #ifdef _WIN32 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
62 # define WIN32_LEAN_AND_MEAN |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
63 # include <windows.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
64 /* MEMORYSTATUSEX is missing from older windows headers, so define |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
65 a local replacement. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
66 typedef struct |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
67 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
68 DWORD dwLength; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
69 DWORD dwMemoryLoad; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
70 DWORDLONG ullTotalPhys; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
71 DWORDLONG ullAvailPhys; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
72 DWORDLONG ullTotalPageFile; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
73 DWORDLONG ullAvailPageFile; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
74 DWORDLONG ullTotalVirtual; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
75 DWORDLONG ullAvailVirtual; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
76 DWORDLONG ullAvailExtendedVirtual; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
77 } lMEMORYSTATUSEX; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
78 typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
79 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
80 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
81 #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
82 |
3064 | 83 /* Return the total amount of physical memory. */ |
84 double | |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
85 physmem_total () |
3064 | 86 { |
87 #if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE | |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
88 { /* This works on linux-gnu, solaris2 and cygwin. */ |
3607
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
89 double pages = sysconf (_SC_PHYS_PAGES); |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
90 double pagesize = sysconf (_SC_PAGESIZE); |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
91 if (0 <= pages && 0 <= pagesize) |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
92 return pages * pagesize; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
93 } |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
94 #endif |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
95 |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
96 #if HAVE_PSTAT_GETSTATIC |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
97 { /* This works on hpux11. */ |
3607
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
98 struct pst_static pss; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
99 if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)) |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
100 { |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
101 double pages = pss.physical_memory; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
102 double pagesize = pss.page_size; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
103 if (0 <= pages && 0 <= pagesize) |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
104 return pages * pagesize; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
105 } |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
106 } |
3064 | 107 #endif |
108 | |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
109 #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
110 { /* This works on irix6. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
111 struct rminfo realmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
112 if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
113 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
114 double pagesize = sysconf (_SC_PAGESIZE); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
115 double pages = realmem.physmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
116 if (0 <= pages && 0 <= pagesize) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
117 return pages * pagesize; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
118 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
119 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
120 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
121 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
122 #if HAVE_GETSYSINFO && defined GSI_PHYSMEM |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
123 { /* This works on Tru64 UNIX V4/5. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
124 int physmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
125 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
126 if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem), |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
127 NULL, NULL, NULL) == 1) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
128 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
129 double kbytes = physmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
130 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
131 if (0 <= kbytes) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
132 return kbytes * 1024.0; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
133 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
134 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
135 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
136 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
137 #if HAVE_SYSCTL && defined HW_PHYSMEM |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
138 { /* This works on *bsd and darwin. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
139 unsigned int physmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
140 size_t len = sizeof physmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
141 static int mib[2] = { CTL_HW, HW_PHYSMEM }; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
142 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
143 if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
144 && len == sizeof (physmem)) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
145 return (double) physmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
146 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
147 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
148 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
149 #if HAVE__SYSTEM_CONFIGURATION |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
150 /* This works on AIX. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
151 return _system_configuration.physmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
152 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
153 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
154 #if defined _WIN32 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
155 { /* this works on windows */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
156 PFN_MS_EX pfnex; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
157 HMODULE h = GetModuleHandle ("kernel32.dll"); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
158 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
159 if (!h) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
160 return 0.0; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
161 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
162 /* Use GlobalMemoryStatusEx if available. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
163 if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
164 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
165 lMEMORYSTATUSEX lms_ex; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
166 lms_ex.dwLength = sizeof lms_ex; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
167 if (!pfnex (&lms_ex)) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
168 return 0.0; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
169 return (double) lms_ex.ullTotalPhys; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
170 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
171 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
172 /* Fall back to GlobalMemoryStatus which is always available. |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
173 but returns wrong results for physical memory > 4GB. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
174 else |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
175 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
176 MEMORYSTATUS ms; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
177 GlobalMemoryStatus (&ms); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
178 return (double) ms.dwTotalPhys; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
179 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
180 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
181 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
182 |
3064 | 183 /* Guess 64 MB. It's probably an older host, so guess small. */ |
184 return 64 * 1024 * 1024; | |
185 } | |
186 | |
187 /* Return the amount of physical memory available. */ | |
188 double | |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
189 physmem_available () |
3064 | 190 { |
191 #if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE | |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
192 { /* This works on linux-gnu, solaris2 and cygwin. */ |
3607
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
193 double pages = sysconf (_SC_AVPHYS_PAGES); |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
194 double pagesize = sysconf (_SC_PAGESIZE); |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
195 if (0 <= pages && 0 <= pagesize) |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
196 return pages * pagesize; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
197 } |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
198 #endif |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
199 |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
200 #if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
201 { /* This works on hpux11. */ |
3607
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
202 struct pst_static pss; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
203 struct pst_dynamic psd; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
204 if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0) |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
205 && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0)) |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
206 { |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
207 double pages = psd.psd_free; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
208 double pagesize = pss.page_size; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
209 if (0 <= pages && 0 <= pagesize) |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
210 return pages * pagesize; |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
211 } |
0eb39272f531
[HAVE_SYS_PSTAT_H]: Include <sys/pstat.h>.
Jim Meyering <jim@meyering.net>
parents:
3064
diff
changeset
|
212 } |
3064 | 213 #endif |
214 | |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
215 #if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
216 { /* This works on irix6. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
217 struct rminfo realmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
218 if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
219 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
220 double pagesize = sysconf (_SC_PAGESIZE); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
221 double pages = realmem.availrmem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
222 if (0 <= pages && 0 <= pagesize) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
223 return pages * pagesize; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
224 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
225 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
226 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
227 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
228 #if HAVE_TABLE && defined TBL_VMSTATS |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
229 { /* This works on Tru64 UNIX V4/5. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
230 struct tbl_vmstats vmstats; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
231 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
232 if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
233 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
234 double pages = vmstats.free_count; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
235 double pagesize = vmstats.pagesize; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
236 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
237 if (0 <= pages && 0 <= pagesize) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
238 return pages * pagesize; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
239 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
240 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
241 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
242 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
243 #if HAVE_SYSCTL && defined HW_USERMEM |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
244 { /* This works on *bsd and darwin. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
245 unsigned int usermem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
246 size_t len = sizeof usermem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
247 static int mib[2] = { CTL_HW, HW_USERMEM }; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
248 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
249 if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
250 && len == sizeof (usermem)) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
251 return (double) usermem; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
252 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
253 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
254 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
255 #if defined _WIN32 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
256 { /* this works on windows */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
257 PFN_MS_EX pfnex; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
258 HMODULE h = GetModuleHandle ("kernel32.dll"); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
259 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
260 if (!h) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
261 return 0.0; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
262 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
263 /* Use GlobalMemoryStatusEx if available. */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
264 if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx"))) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
265 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
266 lMEMORYSTATUSEX lms_ex; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
267 lms_ex.dwLength = sizeof lms_ex; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
268 if (!pfnex (&lms_ex)) |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
269 return 0.0; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
270 return (double) lms_ex.ullAvailPhys; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
271 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
272 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
273 /* Fall back to GlobalMemoryStatus which is always available. |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
274 but returns wrong results for physical memory > 4GB */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
275 else |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
276 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
277 MEMORYSTATUS ms; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
278 GlobalMemoryStatus (&ms); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
279 return (double) ms.dwAvailPhys; |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
280 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
281 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
282 #endif |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
283 |
3064 | 284 /* Guess 25% of physical memory. */ |
285 return physmem_total () / 4; | |
286 } | |
4551
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
287 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
288 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
289 #if DEBUG |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
290 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
291 # include <stdio.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
292 # include <stdlib.h> |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
293 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
294 int |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
295 main () |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
296 { |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
297 printf ("%12.f %12.f\n", physmem_total (), physmem_available ()); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
298 exit (0); |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
299 } |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
300 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
301 #endif /* DEBUG */ |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
302 |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
303 /* |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
304 Local Variables: |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
305 compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W physmem.c" |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
306 End: |
e98bdaad6174
Merge in portability changes from gcc/libiberty
Paul Eggert <eggert@cs.ucla.edu>
parents:
3607
diff
changeset
|
307 */ |