Рубрики

ВОРОТА | GATE-CS-2002 | Вопрос 17

На языке Си
(A) Существует не более одной записи активации между текущей записью активации и записью активации для основного
(B) Количество записей активации между текущей записью активации и записью активации для главной зависит от фактической последовательности вызова функции.
(C) Видимость глобальных переменных зависит от фактической последовательности вызова функции.
(D) Рекурсия требует, чтобы запись активации рекурсивной функции была сохранена в другом стеке, прежде чем рекурсивная функция может быть вызвана.

Ответ: (Б)
Объяснение:

Часть стека, используемая для вызова функции, называется кадром стека функции или записью активации.
Запись активации — это еще одно имя для Stack Frame. Это структура данных, которая составляет стек вызовов. Обычно состоит из:

  • Местные жители к вызываемой
  • Обратный адрес звонившему
  • Параметры вызываемого абонента

Таким образом, стек вызовов состоит из любого количества записей активации, которые добавляются в стек по мере добавления новых подпрограмм и удаления из стека (обычно) по мере их возврата.
На языке Си выполнение программы начинается с основной функции, поэтому это первая запись активации в стеке функций. Теперь посмотрим на каждый вариант :

Вариант а утверждение ложно, так как любое количество функций может быть вызвано из основного. Может не потребоваться, чтобы существовала не более одной записи активации и записи активации основной.
Например — как в случае рекурсии.

Recurse (int n)
{
    if(n==0)
         return ;
       else 
         recurse(n-1);
}

В вышеприведенном примере запись активации main и recurse (4) будет иметь запись активации recurse (5), recurse (6) (более одного), если мы сначала передадим n = 6 функции.

Вариант b — Истина, как только функция вызывается, ее запись активации создается в стеке функций.

Вариант c — В языке C переменные статически ограничены, а не динамически, глобальным переменным статически назначается адресное пространство, когда начинается выполнение, независимо от того, когда и где они используются.

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

Recurse(4)
Recurse(5)
Recurse(6)
Main()

См. Http://geeksquiz.com/c-misc-question-1/

Это решение предоставлено P arul sharma .

Тест на этот вопрос

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

ВОРОТА | GATE-CS-2002 | Вопрос 17

0.00 (0%) 0 votes