判断栈的增长方向(转)

dreamhead老大曾经讨论过这个问题,寻找一种可移植的方式来判断栈的增长方向,见《栈的增长方向》。今天在读Ruby hacking guide第5章,介绍alloca函数的部分,提到ruby实现的C语言版本的alloca.c,读了下代码,发现这里倒是实现了一个很漂亮的函数用于实现判断栈的增长方向,利用了局部static变量,与dreamhead老大的想法其实是一致的。

#include < stdio.h >
static   void  find_stack_direction( void );
static   int  stack_dir;
int  main( void )
{
  find_stack_direction();
  
if (stack_dir == 1 )
     puts(
" stack grew upward " );
  
else
     puts(
" stack grew downward " );
  
return   0 ;
}
static   void  find_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 
=   & dummy;

      find_stack_direction ();  
/*  recurse once  */
    }
  
else                            /*  second entry  */
    
if  ( & dummy  >  addr)
      stack_dir 
=   1 ;             /*  stack grew upward  */
    
else
      stack_dir 
=   - 1 ;            /*  stack grew downward  */
}

你可能感兴趣的:(c,null,Ruby,语言)