📄 physmem.c
字号:
/* Calculate the size of physical memory. Copyright 2000, 2001 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *//* Written by Paul Eggert. */#if HAVE_CONFIG_H# include <config.h>#endif#include "physmem.h"#if HAVE_UNISTD_H# include <unistd.h>#endif#if HAVE_SYS_PSTAT_H# include <sys/pstat.h>#endif/* Return the total amount of physical memory. */doublephysmem_total (void){#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE { double pages = sysconf (_SC_PHYS_PAGES); double pagesize = sysconf (_SC_PAGESIZE); if (0 <= pages && 0 <= pagesize) return pages * pagesize; }#endif#if HAVE_PSTAT_GETSTATIC { struct pst_static pss; if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)) { double pages = pss.physical_memory; double pagesize = pss.page_size; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } }#endif /* Guess 64 MB. It's probably an older host, so guess small. */ return 64 * 1024 * 1024;}/* Return the amount of physical memory available. */doublephysmem_available (void){#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE { double pages = sysconf (_SC_AVPHYS_PAGES); double pagesize = sysconf (_SC_PAGESIZE); if (0 <= pages && 0 <= pagesize) return pages * pagesize; }#endif#if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC { struct pst_static pss; struct pst_dynamic psd; if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0) && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0)) { double pages = psd.psd_free; double pagesize = pss.page_size; if (0 <= pages && 0 <= pagesize) return pages * pagesize; } }#endif /* Guess 25% of physical memory. */ return physmem_total () / 4;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -