亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? alloca.c

?? bison 2.0 主要可以用來做語(yǔ)法分析用的
?? C
字號(hào):
/* 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 <jot@cray.com> 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 <config.h>#endif#include <alloca.h>#include <string.h>#include <stdlib.h>#ifdef emacs# include "lisp.h"# include "blockinput.h"# ifdef EMACS_FREE#  undef free#  define free EMACS_FREE# endif#else# define memory_full() abort ()#endif/* If compiling with GCC 2, this file's not needed.  */#if !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_DIRECTIONyoulose-- must know STACK_DIRECTION at compile-time/* Using #error here is not wise since this file should work for   old and obscure compilers.  */#    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/* 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 toward higher addresses   STACK_DIRECTION < 0 => grows toward lower addresses   STACK_DIRECTION = 0 => direction of growth unknown  */#  ifndef STACK_DIRECTION#   define STACK_DIRECTION	0	/* Direction unknown.  */#  endif#  if STACK_DIRECTION != 0#   define STACK_DIR	STACK_DIRECTION	/* Known at compile-time.  */#  else /* STACK_DIRECTION == 0; need run-time code.  */static int stack_dir;		/* 1 or -1 once known.  */#   define STACK_DIR	stack_dirstatic voidfind_stack_direction (void){  static char *addr = NULL;	/* Address of first `dummy', once known.  */  auto char dummy;		/* To get stack address.  */  if (addr == NULL)    {				/* Initial entry.  */      addr = ADDRESS_FUNCTION (dummy);      find_stack_direction ();	/* Recurse once.  */    }  else    {      /* Second entry.  */      if (ADDRESS_FUNCTION (dummy) > addr)	stack_dir = 1;		/* Stack grew upward.  */      else	stack_dir = -1;		/* Stack grew downward.  */    }}#  endif /* STACK_DIRECTION == 0 *//* An "alloca header" is used to:   (a) chain together all alloca'ed blocks;   (b) keep track of stack depth.   It is very important that sizeof(header) agree with malloc   alignment chunk size.  The following default should work okay.  */#  ifndef	ALIGN_SIZE#   define ALIGN_SIZE	sizeof(double)#  endiftypedef union hdr{  char align[ALIGN_SIZE];	/* To force sizeof(header).  */  struct    {      union hdr *next;		/* For chaining headers.  */      char *deep;		/* For stack depth measure.  */    } h;} header;static header *last_alloca_header = NULL;	/* -> last alloca header.  *//* Return a pointer to at least SIZE bytes of storage,   which will be automatically reclaimed upon exit from   the procedure that called alloca.  Originally, this space   was supposed to be taken from the current stack frame of the   caller, but that method cannot be made to work for some   implementations of C, for example under Gould's UTX/32.  */void *alloca (size_t size){  auto char probe;		/* Probes stack depth: */  register char *depth = ADDRESS_FUNCTION (probe);#  if STACK_DIRECTION == 0  if (STACK_DIR == 0)		/* Unknown growth direction.  */    find_stack_direction ();#  endif  /* Reclaim garbage, defined as all alloca'd storage that     was allocated from deeper in the stack than currently.  */  {    register header *hp;	/* Traverses linked list.  */#  ifdef emacs    BLOCK_INPUT;#  endif    for (hp = last_alloca_header; hp != NULL;)      if ((STACK_DIR > 0 && hp->h.deep > depth)	  || (STACK_DIR < 0 && hp->h.deep < depth))	{	  register header *np = hp->h.next;	  free (hp);		/* Collect garbage.  */	  hp = np;		/* -> next header.  */	}      else	break;			/* Rest are not deeper.  */    last_alloca_header = hp;	/* -> last valid storage.  */#  ifdef emacs    UNBLOCK_INPUT;#  endif  }  if (size == 0)    return NULL;		/* No allocation required.  */  /* Allocate combined header + user data storage.  */  {    /* Address of header.  */    register header *new;    size_t combined_size = sizeof (header) + size;    if (combined_size < sizeof (header))      memory_full ();    new = malloc (combined_size);    if (! new)      memory_full ();    new->h.next = last_alloca_header;    new->h.deep = depth;    last_alloca_header = new;    /* User storage begins just after header.  */    return (void *) (new + 1);  }}#  if defined (CRAY) && defined (CRAY_STACKSEG_END)#   ifdef DEBUG_I00AFUNC#    include <stdio.h>#   endif#   ifndef CRAY_STACK#    define CRAY_STACK#    ifndef CRAY2/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */struct stack_control_header  {    long shgrow:32;		/* Number of times stack has grown.  */    long shaseg:32;		/* Size of increments to stack.  */    long shhwm:32;		/* High water mark of stack.  */    long shsize:32;		/* Current size of stack (all segments).  */  };/* The stack segment linkage control information occurs at   the high-address end of a stack segment.  (The stack   grows from low addresses to high addresses.)  The initial   part of the stack segment linkage control information is   0200 (octal) words.  This provides for register storage   for the routine which overflows the stack.  */struct stack_segment_linkage  {    long ss[0200];		/* 0200 overflow words.  */    long sssize:32;		/* Number of words in this segment.  */    long ssbase:32;		/* Offset to stack base.  */    long:32;    long sspseg:32;		/* Offset to linkage control of previous				   segment of stack.  */    long:32;    long sstcpt:32;		/* Pointer to task common address block.  */    long sscsnm;		/* Private control structure number for				   microtasking.  */    long ssusr1;		/* Reserved for user.  */    long ssusr2;		/* Reserved for user.  */    long sstpid;		/* Process ID for pid based multi-tasking.  */    long ssgvup;		/* Pointer to multitasking thread giveup.  */    long sscray[7];		/* Reserved for Cray Research.  */    long ssa0;    long ssa1;    long ssa2;    long ssa3;    long ssa4;    long ssa5;    long ssa6;    long ssa7;    long sss0;    long sss1;    long sss2;    long sss3;    long sss4;    long sss5;    long sss6;    long sss7;  };#    else /* CRAY2 *//* The following structure defines the vector of words   returned by the STKSTAT library routine.  */struct stk_stat  {    long now;			/* Current total stack size.  */    long maxc;			/* Amount of contiguous space which would				   be required to satisfy the maximum				   stack demand to date.  */    long high_water;		/* Stack high-water mark.  */    long overflows;		/* Number of stack overflow ($STKOFEN) calls.  */    long hits;			/* Number of internal buffer hits.  */    long extends;		/* Number of block extensions.  */    long stko_mallocs;		/* Block allocations by $STKOFEN.  */    long underflows;		/* Number of stack underflow calls ($STKRETN).  */    long stko_free;		/* Number of deallocations by $STKRETN.  */    long stkm_free;		/* Number of deallocations by $STKMRET.  */    long segments;		/* Current number of stack segments.  */    long maxs;			/* Maximum number of stack segments so far.  */    long pad_size;		/* Stack pad size.  */    long current_address;	/* Current stack segment address.  */    long current_size;		/* Current stack segment size.  This				   number is actually corrupted by STKSTAT to				   include the fifteen word trailer area.  */    long initial_address;	/* Address of initial segment.  */    long initial_size;		/* Size of initial segment.  */  };/* The following structure describes the data structure which trails   any stack segment.  I think that the description in 'asdef' is   out of date.  I only describe the parts that I am sure about.  */struct stk_trailer  {    long this_address;		/* Address of this block.  */    long this_size;		/* Size of this block (does not include				   this trailer).  */    long unknown2;    long unknown3;    long link;			/* Address of trailer block of previous				   segment.  */    long unknown5;    long unknown6;    long unknown7;    long unknown8;    long unknown9;    long unknown10;    long unknown11;    long unknown12;    long unknown13;    long unknown14;  };#    endif /* CRAY2 */#   endif /* not CRAY_STACK */#   ifdef CRAY2/* Determine a "stack measure" for an arbitrary ADDRESS.   I doubt that "lint" will like this much.  */static longi00afunc (long *address){  struct stk_stat status;  struct stk_trailer *trailer;  long *block, size;  long result = 0;  /* We want to iterate through all of the segments.  The first     step is to get the stack status structure.  We could do this     more quickly and more directly, perhaps, by referencing the     $LM00 common block, but I know that this works.  */  STKSTAT (&status);  /* Set up the iteration.  */  trailer = (struct stk_trailer *) (status.current_address				    + status.current_size				    - 15);  /* There must be at least one stack segment.  Therefore it is     a fatal error if "trailer" is null.  */  if (trailer == 0)    abort ();  /* Discard segments that do not contain our argument address.  */  while (trailer != 0)    {      block = (long *) trailer->this_address;      size = trailer->this_size;      if (block == 0 || size == 0)	abort ();      trailer = (struct stk_trailer *) trailer->link;      if ((block <= address) && (address < (block + size)))	break;    }  /* Set the result to the offset in this segment and add the sizes     of all predecessor segments.  */  result = address - block;  if (trailer == 0)    {      return result;    }  do    {      if (trailer->this_size <= 0)	abort ();      result += trailer->this_size;      trailer = (struct stk_trailer *) trailer->link;    }  while (trailer != 0);  /* We are done.  Note that if you present a bogus address (one     not in any segment), you will get a different number back, formed     from subtracting the address of the first block.  This is probably     not what you want.  */  return (result);}#   else /* not CRAY2 *//* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.   Determine the number of the cell within the stack,   given the address of the cell.  The purpose of this   routine is to linearize, in some sense, stack addresses   for alloca.  */static longi00afunc (long address){  long stkl = 0;  long size, pseg, this_segment, stack;  long result = 0;  struct stack_segment_linkage *ssptr;  /* Register B67 contains the address of the end of the     current stack segment.  If you (as a subprogram) store     your registers on the stack and find that you are past     the contents of B67, you have overflowed the segment.     B67 also points to the stack segment linkage control     area, which is what we are really interested in.  */  stkl = CRAY_STACKSEG_END ();  ssptr = (struct stack_segment_linkage *) stkl;  /* If one subtracts 'size' from the end of the segment,     one has the address of the first word of the segment.     If this is not the first segment, 'pseg' will be     nonzero.  */  pseg = ssptr->sspseg;  size = ssptr->sssize;  this_segment = stkl - size;  /* It is possible that calling this routine itself caused     a stack overflow.  Discard stack segments which do not     contain the target address.  */  while (!(this_segment <= address && address <= stkl))    {#    ifdef DEBUG_I00AFUNC      fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);#    endif      if (pseg == 0)	break;      stkl = stkl - pseg;      ssptr = (struct stack_segment_linkage *) stkl;      size = ssptr->sssize;      pseg = ssptr->sspseg;      this_segment = stkl - size;    }  result = address - this_segment;  /* If you subtract pseg from the current end of the stack,     you get the address of the previous stack segment's end.     This seems a little convoluted to me, but I'll bet you save     a cycle somewhere.  */  while (pseg != 0)    {#    ifdef DEBUG_I00AFUNC      fprintf (stderr, "%011o %011o\n", pseg, size);#    endif      stkl = stkl - pseg;      ssptr = (struct stack_segment_linkage *) stkl;      size = ssptr->sssize;      pseg = ssptr->sspseg;      result += size;    }  return (result);}#   endif /* not CRAY2 */#  endif /* CRAY */# endif /* no alloca */#endif /* not GCC version 2 */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线看| 日日摸夜夜添夜夜添亚洲女人| 欧洲视频一区二区| 久久精品国产免费| 亚洲精品视频在线看| 欧美精品一区二| 欧美日韩1区2区| 成人v精品蜜桃久久一区| 免费人成网站在线观看欧美高清| 国产精品久久久一区麻豆最新章节| 欧美日韩国产区一| www.久久精品| 精品一区二区三区av| 亚洲国产综合在线| 国产精品精品国产色婷婷| 日韩欧美一区二区在线视频| 欧美视频一区二区三区四区| 91在线观看成人| 国产不卡在线视频| 国产一区91精品张津瑜| 蜜桃视频免费观看一区| 婷婷综合久久一区二区三区| 亚洲人成在线观看一区二区| 国产精品久久久久天堂| 26uuu精品一区二区 | 精品久久人人做人人爽| 欧美军同video69gay| 一本色道亚洲精品aⅴ| 成人中文字幕在线| 国产在线视频一区二区| 久久精品国产精品亚洲综合| 日韩精品亚洲专区| 日韩国产一区二| 日本一区中文字幕| 日本免费在线视频不卡一不卡二| 亚洲国产综合人成综合网站| 亚洲一区二区三区四区在线观看 | 91丝袜美女网| 99久久久国产精品| 色呦呦国产精品| 一本久久精品一区二区| 在线日韩国产精品| 在线日韩av片| 欧美精品丝袜中出| 8v天堂国产在线一区二区| 91精品国产色综合久久| 日韩欧美资源站| 2024国产精品视频| 国产免费久久精品| √…a在线天堂一区| 夜夜亚洲天天久久| 日韩国产欧美在线视频| 激情深爱一区二区| 不卡视频在线看| 在线观看一区二区精品视频| 欧美群妇大交群中文字幕| 91精品国产91久久久久久一区二区| 欧美日韩1234| 久久久久久久久久久久久女国产乱 | 欧美一区二区三区成人| 欧美xxxx在线观看| 欧美国产精品久久| 亚洲愉拍自拍另类高清精品| 一区二区三区四区蜜桃| 午夜免费欧美电影| 激情成人午夜视频| av成人免费在线观看| 色老汉一区二区三区| 欧美一级精品在线| 国产精品久久夜| 婷婷综合久久一区二区三区| 国产又黄又大久久| 日本伦理一区二区| 日韩午夜激情免费电影| 国产精品你懂的在线| 亚洲国产另类精品专区| 精品在线一区二区| av一区二区三区在线| 欧美顶级少妇做爰| 国产精品免费av| 亚洲成人1区2区| 国产黄人亚洲片| 欧美日韩三级一区| 久久精品欧美日韩| 亚洲高清免费在线| 粉嫩久久99精品久久久久久夜| 欧美三级日韩三级| 中文字幕免费不卡| 青青草一区二区三区| 色综合一区二区| 欧美大度的电影原声| 一区二区高清在线| 国产69精品久久777的优势| 欧美日韩综合一区| 国产精品欧美一区喷水| 蜜桃久久久久久久| 91黄色激情网站| 欧美极品xxx| 日韩电影在线看| 91亚洲精品一区二区乱码| 日韩一区二区电影在线| 亚洲免费在线电影| 国产福利91精品| 日韩免费一区二区| 五月天亚洲婷婷| 色8久久人人97超碰香蕉987| 久久中文字幕电影| 日韩影视精彩在线| 在线看国产一区| 国产精品久久久久一区| 国产精品一二三| 日韩区在线观看| 亚洲va在线va天堂| 色婷婷综合久久久久中文| 国产欧美日韩三区| 久久精品国产成人一区二区三区 | 国产午夜精品美女毛片视频| 日韩成人伦理电影在线观看| 一本到不卡精品视频在线观看| 国产亚洲美州欧州综合国 | 欧美日韩视频在线一区二区| 亚洲欧洲日韩综合一区二区| 国产真实乱子伦精品视频| 欧美一卡2卡3卡4卡| 亚洲成在人线在线播放| 色综合久久久久网| 一区二区三区四区在线免费观看| 99精品久久99久久久久| 日本一区二区三区国色天香 | 成人免费va视频| 久久久99精品免费观看| 韩国视频一区二区| 久久一区二区视频| 国产综合色在线视频区| 久久久精品天堂| 国产激情视频一区二区在线观看 | 欧美激情综合五月色丁香小说| 国内外精品视频| 精品捆绑美女sm三区| 国产美女精品在线| 欧美国产日本视频| 成人av在线观| 亚洲欧美日韩精品久久久久| 99久久99久久精品国产片果冻| 亚洲欧美自拍偷拍色图| 一本到不卡精品视频在线观看| 一级特黄大欧美久久久| 欧美日韩国产小视频| 日本不卡在线视频| 欧美成人女星排名| 国产99一区视频免费| 国产精品传媒视频| 欧美色综合网站| 免费成人小视频| 337p日本欧洲亚洲大胆色噜噜| 国产精选一区二区三区| 国产精品美女久久久久久久 | 国产精品免费aⅴ片在线观看| 成人短视频下载| 亚洲一区视频在线| 精品国产人成亚洲区| 丁香啪啪综合成人亚洲小说 | 亚洲视频在线观看一区| 欧美综合视频在线观看| 日韩成人av影视| 日韩久久免费av| 成人18视频日本| 亚洲成人黄色影院| 久久久www免费人成精品| 99精品久久只有精品| 青青青伊人色综合久久| 国产欧美在线观看一区| 日本精品一区二区三区高清| 免费精品视频最新在线| 国产精品女主播av| 91精品久久久久久蜜臀| 粉嫩绯色av一区二区在线观看 | 欧美国产日韩精品免费观看| 欧亚一区二区三区| 国产在线精品免费| 一区二区三区在线免费观看| 欧美伦理视频网站| 丁香五精品蜜臀久久久久99网站| 中文字幕亚洲综合久久菠萝蜜| 欧美日韩亚洲另类| 成人午夜激情片| 麻豆精品一二三| 一区二区三区四区激情| 久久中文字幕电影| 欧美日韩高清一区二区三区| 成人丝袜视频网| 免费在线观看一区| 亚洲精品自拍动漫在线| 精品动漫一区二区三区在线观看| 91视频一区二区| 国产在线精品一区在线观看麻豆| 亚洲资源在线观看| 国产欧美日产一区| 日韩亚洲欧美高清| 欧美日韩精品综合在线|