判断栈的增长方向

  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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值