閱讀640 返回首頁    go 魔獸


判斷棧的增長方向

  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

最後更新:2017-05-18 10:32:52

  上一篇:go  模仿st_table寫的StTable類
  下一篇:go  Spring5新功能