dreamhead老大曾经讨论过这个问题,寻找一种可移植的方式来判断栈的增长方向,见《
栈的增长方向》。 今天在读Ruby hacking guide第5章,介绍alloca函数的部分,提到ruby实现的C语言版本的alloca.c,读了下代码,发现这里倒是实现了一个很漂亮的函数用于 实现判断栈的增长方向,利用了局部static变量,与dreamhead老大的想法其实是一致的。
cpp 代码
- #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 */
- }