Что такое запись активации в контексте C и C++?

2 ответа

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

  • Локальных переменных для вызываемого
  • Обратного адреса вызывающему
  • Параметры вызываемого

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

Фактическая структура и порядок элементов определяется платформой и даже реализацией.

Для программистов C / C ++, общие знания ] этой структуры полезен для понимания некоторых функций реализации, таких как соглашения о вызовах, и даже того, почему переполнение буфера позволяет запускать сторонний вредоносный код.

53
ответ дан 27 November 2019 в 01:44
поделиться

запись активации не является понятием, которое часто используется в разговорах о самих языках C или C ++. Формат записей активации в значительной степени зависит от платформы.

Концептуально, как передаются параметры, время жизни локальных переменных, куда возвращаются функции и как разворачивается стек вызовов в ответ на бросок ожидания являются важными частями C ++ и (за исключением последнего C). Детали того, как они реализованы, повлияют на то, как запись активации будет выглядеть для конкретной платформы, но знание этого обычно не требуется для написания кода на C ++ или C.

7
ответ дан 27 November 2019 в 01:44
поделиться