⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vm-limit.c

📁 内存分配的各种包装函数
💻 C
字号:
/* Functions for memory limit warnings.   Copyright (C) 1990, 1992 Free Software Foundation, Inc.This file is part of the GNU C Library.  Its master source is NOT part ofthe C library, however.  The master source lives in /gd/gnu/lib.The GNU C Library is free software; you can redistribute it and/ormodify it under the terms of the GNU Library General Public License aspublished by the Free Software Foundation; either version 2 of theLicense, or (at your option) any later version.The GNU C Library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULibrary General Public License for more details.You should have received a copy of the GNU Library General PublicLicense along with the GNU C Library; see the file COPYING.LIB.  Ifnot, write to the Free Software Foundation, Inc., 675 Mass Ave,Cambridge, MA 02139, USA.  */#ifdef emacs#include <config.h>#include "lisp.h"#endif#ifndef emacs#include <stddef.h>typedef size_t SIZE;typedef void *POINTER;#define EXCEEDS_LISP_PTR(x) 0#endif#include "mem-limits.h"/*  Level number of warnings already issued.  0 -- no warnings issued.  1 -- 75% warning already issued.  2 -- 85% warning already issued.  3 -- 95% warning issued; keep warning frequently.*/static int warnlevel;/* Function to call to issue a warning;   0 means don't issue them.  */static void (*warn_function) ();/* Get more memory space, complaining if we're near the end. */static voidcheck_memory_limits (){  extern POINTER (*__morecore) ();  register POINTER cp;  unsigned long five_percent;  unsigned long data_size;  if (lim_data == 0)    get_lim_data ();  five_percent = lim_data / 20;  /* Find current end of memory and issue warning if getting near max */  cp = (char *) (*__morecore) (0);  data_size = (char *) cp - (char *) data_space_start;  if (warn_function)    switch (warnlevel)      {      case 0: 	if (data_size > five_percent * 15)	  {	    warnlevel++;	    (*warn_function) ("Warning: past 75% of memory limit");	  }	break;      case 1: 	if (data_size > five_percent * 17)	  {	    warnlevel++;	    (*warn_function) ("Warning: past 85% of memory limit");	  }	break;      case 2: 	if (data_size > five_percent * 19)	  {	    warnlevel++;	    (*warn_function) ("Warning: past 95% of memory limit");	  }	break;      default:	(*warn_function) ("Warning: past acceptable memory limits");	break;      }  /* If we go down below 70% full, issue another 75% warning     when we go up again.  */  if (data_size < five_percent * 14)    warnlevel = 0;  /* If we go down below 80% full, issue another 85% warning     when we go up again.  */  else if (warnlevel > 1 && data_size < five_percent * 16)    warnlevel = 1;  /* If we go down below 90% full, issue another 95% warning     when we go up again.  */  else if (warnlevel > 2 && data_size < five_percent * 18)    warnlevel = 2;  if (EXCEEDS_LISP_PTR (cp))    (*warn_function) ("Warning: memory in use exceeds lisp pointer size");}/* Cause reinitialization based on job parameters;   also declare where the end of pure storage is. */voidmemory_warnings (start, warnfun)     POINTER start;     void (*warnfun) ();{  extern void (* __after_morecore_hook) ();     /* From gmalloc.c */  if (start)    data_space_start = start;  else    data_space_start = start_of_data ();  warn_function = warnfun;  __after_morecore_hook = check_memory_limits;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -