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