庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

判断栈的增长方向

Posted on 2007-09-17 16:16 dennis 阅读(1128) 评论(0)  编辑  收藏 所属分类: linux & C
    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 */
}


只有注册用户登录后才能发表评论。


网站导航: