您的位置:首页 > 其它

判断栈的增长方向

2012-09-20 21:05 267 查看
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 */
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: