莊周夢蝶

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

          判斷棧的增長方向

          Posted on 2007-09-17 16:16 dennis 閱讀(1138) 評論(0)  編輯  收藏 所屬分類: linux & C
              dreamhead老大曾經(jīng)討論過這個(gè)問題,尋找一種可移植的方式來判斷棧的增長方向,見《棧的增長方向》。今天在讀Ruby hacking guide第5章,介紹alloca函數(shù)的部分,提到ruby實(shí)現(xiàn)的C語言版本的alloca.c,讀了下代碼,發(fā)現(xiàn)這里倒是實(shí)現(xiàn)了一個(gè)很漂亮的函數(shù)用于實(shí)現(xiàn)判斷棧的增長方向,利用了局部static變量,與dreamhead老大的想法其實(shí)是一致的。
          #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 */
          }

          主站蜘蛛池模板: 斗六市| 南投市| 库车县| 安泽县| 沛县| 乐亭县| 龙海市| 福泉市| 永吉县| 铜陵市| 福清市| 宁德市| 山东省| 砀山县| 孙吴县| 汪清县| 山东| 壤塘县| 两当县| 深州市| 青海省| 邯郸市| 民勤县| 澎湖县| 和平县| 西乌珠穆沁旗| 蒙自县| 许昌县| 吉木乃县| 绵竹市| 莆田市| 临潭县| 鱼台县| 久治县| 宁津县| 宜川县| 兰西县| 文登市| 井冈山市| 孝感市| 秭归县|