資源簡介
GNU MAKE程序的源碼。來自GNU官方網站,編譯需要make和gcc、
代碼片段和文件信息
/*?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.??*/
#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_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?toward?higher?addresses
???STACK_DIRECTION?0?=>?grows?toward?lower?addresses
???STACK_
- 上一篇:LPC2136單片機說明
- 下一篇:基于形態學的圖像分割 圖片版
評論
共有 條評論