• 大小: 4.67MB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2023-08-13
  • 语言: 其他
  • 标签:

资源简介

cygwin-1.1.8-2-src最新源码

资源截图

代码片段和文件信息

/* alloca.c -- allocate automatically reclaimed memory
   (Mostly) portable public-domain implementation -- D A Gwyn

   This implementation of the PWB library alloca function
   which is used to allocate space off the run-time stack so
   that it is automatically reclaimed upon procedure exit
   was inspired by discussions with J. Q. Johnson of Cornell.
   J.Otto Tennant  contributed the Cray support.

   There are some preprocessor constants that can
   be defined when compiling for your specific system for
   improved efficiency; however the defaults should be okay.

   The general concept of this implementation is to keep
   track of all alloca-allocated blocks and reclaim any
   that are found to be deeper in the stack than the current
   invocation.  This heuristic does not reclaim storage as
   soon as it becomes invalid but it will do so eventually.

   As a special case alloca(0) reclaims storage without
   allocating any.  It is a good idea to use alloca(0) in
   your main control loop etc. to force garbage collection.  */

#ifdef HAVE_CONFIG_H
#include 
#endif

#ifdef HAVE_STRING_H
#include 
#endif
#ifdef HAVE_STDLIB_H
#include 
#endif

#ifdef emacs
#include “blockinput.h“
#endif

/* If compiling with GCC 2 this file‘s not needed.  Except of course if
   the C alloca is explicitly requested.  */
#if defined (USE_C_ALLOCA) || !defined (__GNUC__) || __GNUC__ < 2

/* If someone has defined alloca as a macro
   there must be some other way alloca is supposed to work.  */
#ifndef alloca

#ifdef emacs
#ifdef static
/* actually only want this if static is defined as ““
   -- this is for usg in which emacs must undefine static
   in order to make unexec workable
   */
#ifndef STACK_DIRECTION
you
lose
-- must know STACK_DIRECTION at compile-time
#endif /* STACK_DIRECTION undefined */
#endif /* static */
#endif /* emacs */

/* If your stack is a linked list of frames you have to
   provide an “address metric“ ADDRESS_FUNCTION macro.  */

#if defined (CRAY) && defined (CRAY_STACKSEG_END)
long i00afunc ();
#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
#else
#define ADDRESS_FUNCTION(arg) &(arg)
#endif

#if __STDC__
typedef void *pointer;
#else
typedef char *pointer;
#endif

#ifndef NULL
#define NULL 0
#endif

/* Different portions of Emacs need to call different versions of
   malloc.  The Emacs executable needs alloca to call xmalloc because
   ordinary malloc isn‘t protected from input signals.  On the other
   hand the utilities in lib-src need alloca to call malloc; some of
   them are very simple and don‘t have an xmalloc routine.

   Non-Emacs programs expect this to call use xmalloc.

   Callers below should use malloc.  */

#ifndef emacs
#define malloc xmalloc
#endif
extern pointer malloc ();

/* Define STACK_DIRECTION if you know the direction of stack
   growth for your system; otherwise it will be automatically
   deduced at run-time.

   STACK_DIRECTION > 0 => grows 

评论

共有 条评论

相关资源