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
*/
}
文章转自庄周梦蝶 ,原文发布时间2007-09-17
转载请注明原文地址: https://yun.8miu.com/read-131858.html