如何在没有堆栈指针的情况下找到堆栈的当前位置?

时间:2016-09-27 07:53:31

标签: c stack

在接受采访时我被问到如何在不使用堆栈指针的情况下找到堆栈位置,堆栈上限和堆栈深度。我无法给出答案。后来我用谷歌搜索了同样的东西,却得不到一个。任何人都可以帮我找到答案。

2 个答案:

答案 0 :(得分:2)

只需在堆栈上创建一个变量(即使用'自动存储')并获取其地址。

void f() {
    int x;
    printf("Current stack position: %p\n", &x);
}

答案 1 :(得分:0)

我认为这是一种倾听你会给出的解决方案的方法。 所以让我们从int的完全指针堆栈开始:

SELECT tablex.* 
FROM tableX,tableY 
WHERE tableX.col1 LIKE '*' + tableY.col1 + '*'

比通过以下方式给出的位置:

struct stack{
  int *pos;
  int *start;
  int *end;
}
struct stack new_stack(size_t size)
{
   struct stack * res=malloc(sizeof(struct stack));
   res->start=malloc(sizeof(int)*size);
   res->pos=res->start;
   res->end=res->start+size-1;
}

但我认为这是被吸引的; 所以让我们定义一个索引(这不是指针):

  return res->pos-res->start;

其他解决方案是占位符,其值无效。但是每次你应该对整个阵列进行评分都是愚蠢的。 (就像空终止字符串一样) 或者,如果这两个回答不满意的答案是“不可能” 仅当数组声明为静态数组[100]时,才可能使用堆栈上限。 比你得到sizebound(array)/ sizeof(* array)的上限。但是如果你要编写一个堆栈的代码,你就把它写成dinamic