判断栈的增长方向

    xiaoxiao2024-08-17  94

    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  */ } 文章转自庄周梦蝶  ,原文发布时间2007-09-17
    最新回复(0)