Почему вызов функции, а не адреса переменных, используемый для определения направления роста стека?

Я читал различные ответы на вопрос об обнаружении роста стека и понимаю, что в современных архитектурах стек может расти случайным образом, может создаваться из кучи и т. Д.

Однако в этот классический вопрос интервью, Я хочу понять , почему люди используют вызов функции, а не сравнивают две локальные переменные в одной функции. Я думаю, что для этого должна быть какая-то особая причина, но, не будучи разработчиком C / низкого уровня [Java :)], я просто предполагаю.

Вот код, который я пробовал:

void sub (int *a)  {
    int b;
    int c;
    printf ("a:%d\n", a);
    printf ("b:%d\n", &b);
    printf ("c:%d\n", &c);
    if (&b > a) {
        printf ("Stack grows up.\n");
    } else {
        printf ("Stack grows down.\n");
    }
}

int main (void) {
    int a;
    int b;
    sub (&a);
    printf ("\nHere we go again!!\n");
    if (&b > &a)  {
        printf ("Stack grows up.\n");
    } else  {
        printf ("Stack grows down.\n");
    }
    return 0;
}

Я также нашел эту статью который пытается оптимизировать решение, которое я тоже не понимаю: http://www.devx.com/tips/Tip/37412

PS: Судя по различным ответам на этот и другие темы, кажется, что сам вопрос ошибочен / неуместен, так как вопрос интервью, вероятно, усиливает неверные предположения, если кто-то не исследует ответ!

Спасибо!

8
задан codeObserver 21 May 2011 в 02:13
поделиться