2007-09-17
判断栈的增长方向
关键字: linux&c
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 */
- }
评论
Joo
2008-04-23
rubynroll 写道
xombat 写道
请问什么情况下需要判断栈的增长方向?
估计做VM或解释器或调试器之类的东西吧...也或者是像JProfiler支流的性能测试工具
rubynroll
2007-12-24
xombat 写道
请问什么情况下需要判断栈的增长方向?
估计做VM或解释器或调试器之类的东西吧...
xombat
2007-09-28
请问什么情况下需要判断栈的增长方向?
mryufeng
2007-09-27
有必要码?这样代码不好移植
专注 高性能 容错 分布服务器的实现(erlang)
http://mryufeng.javaeye.com
专注 高性能 容错 分布服务器的实现(erlang)
http://mryufeng.javaeye.com
diogin
2007-09-19
#include <stdio.h>
void f(void) {
static int i = 0;
int j = 1;
if (i < 3) {
++i;
printf("%x\n", &j);
f();
}
}
int main(void) {
f();
return 0;
}
void f(void) {
static int i = 0;
int j = 1;
if (i < 3) {
++i;
printf("%x\n", &j);
f();
}
}
int main(void) {
f();
return 0;
}
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 145401 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
最新评论
-
最近的学习和工作
楼主住在棠下。学的一些技术我都没有做过 不过ruby 还是会一点点的
-- by penghao122 -
PL/SQL学习笔记(五)
ELSEIF不对,应该是ELSIF
-- by gmizr -
oracle table-lock的5种 ...
select for update 应该是row share mode的锁, 也 ...
-- by xiaoxiao1984 -
oracle table-lock的5种 ...
如果允许别的session查询或用select for update锁定记录,不 ...
-- by xiaoxiao1984 -
Hadoop分布式文件系统:架 ...
beijing.josh 写道dennis_zane 写道sunhengxin ...
-- by dogstar






评论排行榜