莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          判斷棧的增長方向

          Posted on 2007-09-17 16:16 dennis 閱讀(1138) 評論(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 */
          }

          主站蜘蛛池模板: 石阡县| 华坪县| 吴堡县| 太康县| 滦南县| 加查县| 龙江县| 清徐县| 雅安市| 中卫市| 普洱| 庆云县| 蒙山县| 南京市| 金秀| 榆社县| 牙克石市| 巨鹿县| 赤峰市| 中牟县| 涟水县| 右玉县| 城固县| 仁怀市| 奉新县| 循化| 渑池县| 汝城县| 花垣县| 绥化市| 绥江县| 新泰市| 包头市| 江西省| 隆昌县| 弥渡县| 平阳县| 赫章县| 建水县| 谢通门县| 海宁市|