判断堆栈增长方向
2007-06-04 19:56
309 查看
判断堆栈增长方向
说明:今天看到alloca.c中find_stack_direction函数,用来判断堆栈的增长方向,记录下来。
#define ADDRESS_FUNCTION(arg) &(arg)
/* Define STACK_DIRECTION if you know the direction of stack
growth for your system; otherwise it will be automatically
deduced at run-time.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */
#ifndef STACK_DIRECTION
#define STACK_DIRECTION 0 /* Direction unknown. */
#endif
#if STACK_DIRECTION != 0
#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
#else /* STACK_DIRECTION == 0; need run-time code. */
static int stack_dir; /* 1 or -1 once known. */
#define STACK_DIR stack_dir
static void
find_stack_direction ()
{
static char *addr = NULL; /* Address of first `dummy', once known. */
auto char dummy; /* To get stack address. */
if (addr == NULL)
{ /* Initial entry. */
addr = ADDRESS_FUNCTION (dummy);
find_stack_direction (); /* Recurse once. */
}
else
{
/* Second entry. */
if (ADDRESS_FUNCTION (dummy) > addr)
stack_dir = 1; /* Stack grew upward. */
else
stack_dir = -1; /* Stack grew downward. */
}
}
#endif /* STACK_DIRECTION == 0 */
说明:今天看到alloca.c中find_stack_direction函数,用来判断堆栈的增长方向,记录下来。
#define ADDRESS_FUNCTION(arg) &(arg)
/* Define STACK_DIRECTION if you know the direction of stack
growth for your system; otherwise it will be automatically
deduced at run-time.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */
#ifndef STACK_DIRECTION
#define STACK_DIRECTION 0 /* Direction unknown. */
#endif
#if STACK_DIRECTION != 0
#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
#else /* STACK_DIRECTION == 0; need run-time code. */
static int stack_dir; /* 1 or -1 once known. */
#define STACK_DIR stack_dir
static void
find_stack_direction ()
{
static char *addr = NULL; /* Address of first `dummy', once known. */
auto char dummy; /* To get stack address. */
if (addr == NULL)
{ /* Initial entry. */
addr = ADDRESS_FUNCTION (dummy);
find_stack_direction (); /* Recurse once. */
}
else
{
/* Second entry. */
if (ADDRESS_FUNCTION (dummy) > addr)
stack_dir = 1; /* Stack grew upward. */
else
stack_dir = -1; /* Stack grew downward. */
}
}
#endif /* STACK_DIRECTION == 0 */
相关文章推荐
- 【每日一C之二十一】判断栈增长方向
- 跨平台系统栈的增长方向判断
- 大小端?堆栈增长方向?数组增长方向?
- STM32 大小端模式 与 堆栈及其增长方向分析(转自原子哥)
- 判断栈的增长方向
- 如何判断栈的增长方向?
- 判断栈增长方向
- 系统栈的增长方向判断
- 堆栈的区别及增长方向
- 如何判断栈的增长方向
- STM32 大小端模式 与 堆栈及其增长方向分析
- 堆栈的区别及增长方向
- STM32 大小端模式 与 堆栈及其增长方向分析(转自原子哥)
- STM32 大小端模式 与 堆栈及其增长方向分析
- STM32 大小端序 与 堆栈及其增长方向分析
- 如何判断栈的增长方向?
- 堆栈的增长方向
- STM32 大小端模式 与 堆栈及其增长方向分析
- 栈的增长方向判断方法
- 如何判断栈的增长方向?