Рубрики

Программа на C, чтобы найти направление роста стека

Условие: расположение памяти программ на C

В типичном процессе сегмент стека программы содержит локальные переменные вместе с информацией, которая сохраняется при каждом вызове функции. Каждый раз, когда вызывается функция, адрес стека, к которому следует вернуться, и определенная информация о среде вызывающего, например, некоторые из регистров машины, сохраняются в стеке. Затем вновь вызванная функция выделяет место в стеке для его автоматических и временных переменных.

Стек может расти вниз или вверх в зависимости от среды, для которой компилируется код, т. Е. Зависит от компилятора. Как узнать, растет ли стек вниз или вверх?

Идея состоит в том, чтобы сделать следующее:
1) Сделать локальную переменную в main.
2) Напишите другую функцию fun () со своей локальной переменной.
3) Сделайте вызов fun () с главной. Сравните адреса двух локальных переменных. Если адрес локальной переменной fun () больше, чем локальная переменная main, то стек растет вверх (т.е. адреса увеличиваются)

// C программа для проверки роста стека
// вниз или вверх.
#include<stdio.h>

  

void fun(int *main_local_addr)

{

    int fun_local;

    if (main_local_addr < &fun_local)

        printf("Stack grows upward\n");

    else

        printf("Stack grows downward\n");

}

  

int main()

{

    // забавная локальная переменная

    int main_local;

  

    fun(&main_local);

    return 0;

}

Эта статья предоставлена Акашем Шараном . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Программа на C, чтобы найти направление роста стека

0.00 (0%) 0 votes