Рубрики

ВОРОТА | GATE CS 2008 | Вопрос 54

Что из следующего верно?

I. A programming language which does not permit global variables of any
   kind and has no nesting of procedures/functions, but permits recursion 
   can be implemented with static storage allocation
II. Multi-level access link (or display) arrangement is needed to arrange 
    activation records only if the programming language being implemented 
    has nesting of procedures/functions
III. Recursion in programming languages cannot be implemented with dynamic 
     storage allocation
IV. Nesting of procedures/functions and recursion require a dynamic heap 
    allocation scheme and cannot be implemented with a stack-based allocation
    scheme for activation records
V. Programming languages which permit a function to return a function as its 
   result cannot be implemented with a stack-based storage allocation scheme 
   for activation records

(A) только II и V
(B) только I, III и IV
(C) только I, II и V
(D) только II, III и V

Ответ: (А)
Объяснение: I. Невозможно реализовать рекурсию с помощью статического распределения памяти. Статическое распределение означает, что компилятор должен определить размер для вызовов функций. В случае рекурсии, компилятор не может принять решение, так как глубина рекурсии зависит от параметра рекурсии, который также может быть введен пользователем.

II. Правильно. Языки программирования, которые поддерживают вложенные подпрограммы, также имеют поле в кадре вызова, которое указывает на кадр стека активации процедуры, которая наиболее близко инкапсулирует вызываемый объект, то есть непосредственно вызываемого. Это называется или или (так как он отслеживает статическое вложение во время динамических и рекурсивных вызовов) и предоставляет подпрограмме (а также любым другим подпрограммам, которые она может вызывать) доступ к локальным данным своих инкапсулирующих подпрограмм на каждом уровне вложенности. Некоторые архитектуры, компиляторы или сценарии оптимизации хранят одну ссылку для каждого включающего уровня (а не только непосредственно включающего), так что глубоко вложенные подпрограммы, которые обращаются к поверхностным данным, не должны пересекать несколько ссылок; эту стратегию часто называют «дисплеем» [Источник: https://en.wikipedia.org/wiki/Call_stack ]

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

ВОРОТА | GATE CS 2008 | Вопрос 54

0.00 (0%) 0 votes