annotate lib/physmem.c @ 3064:2850b7ee3063

*** empty log message ***
author Jim Meyering <jim@meyering.net>
date Tue, 19 Dec 2000 08:22:18 +0000
parents
children 0eb39272f531
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3064
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
1 /* Calculate the size of physical memory.
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
2 Copyright 2000 Free Software Foundation, Inc.
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
3
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
6 the Free Software Foundation; either version 2, or (at your option)
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7 any later version.
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
12 GNU General Public License for more details.
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
13
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
15 along with this program; if not, write to the Free Software Foundation,
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
17
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18 /* Written by Paul Eggert. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 #if HAVE_CONFIG_H
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 # include <config.h>
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
23
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24 #include "physmem.h"
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 #if HAVE_UNISTD_H
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 # include <unistd.h>
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 /* Return the total amount of physical memory. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31 double
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32 physmem_total (void)
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 {
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 #if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35 double pages = sysconf (_SC_PHYS_PAGES);
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36 double pagesize = sysconf (_SC_PAGESIZE);
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 if (0 <= pages && 0 <= pagesize)
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38 return pages * pagesize;
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 /* Guess 64 MB. It's probably an older host, so guess small. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 return 64 * 1024 * 1024;
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43 }
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 /* Return the amount of physical memory available. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 double
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 physmem_available (void)
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 {
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 #if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 double pages = sysconf (_SC_AVPHYS_PAGES);
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 double pagesize = sysconf (_SC_PAGESIZE);
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 if (0 <= pages && 0 <= pagesize)
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 return pages * pagesize;
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 #endif
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 /* Guess 25% of physical memory. */
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 return physmem_total () / 4;
2850b7ee3063 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 }