2009-08-12 2 views
24

Что это значит и как важно знать об этом для программистов на C/C++?Что такое запись активации в контексте C и C++?

Это то же самое на платформах, по крайней мере концептуально?

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

Я хочу знать больше

+7

АКИ кадра стеки - см http://en.wikipedia.org/wiki/Activation_record # Структура – 2009-08-12 13:43:58

+1

@Neil, ваш комментарий должен был быть ответом. –

+0

Согласен, но я думаю, что @LB избил его :) – vehomzzz

ответ

33

Активационная запись - другое имя для Stack Frame , Это структура данных, которая составляет стек вызовов. Это, как правило, состоит из:

  • Locals к вызываемому
  • Обратного адрес вызывающей стороны
  • параметров вызываемого

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

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

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

Более интимное знание будет дополнять концепции выше, а также позволить программисту отлаживать свое приложение и считывать дампы памяти даже в отсутствие отладчика или отладочных символов.

В общем, программист на C/C++ может пойти на большую часть своей карьеры программистов-любителей, даже не подумав о том, чтобы вызвать стек вызовов.

+0

@ Alexandre Bell Я понимаю, что вы упоминаете, что AR (стек кадров) содержит локальные вары, ret-адрес и params. Мой вопрос: где код хранимой функции? –

+3

@FernandoGabrieli В C есть сегменты, такие как сегмент кода, сегмент стека, сегмент кучи. поэтому код функции будет храниться в сегменте кода. см. [это] (http://www.geeksforgeeks.org/memory-layout-of-c-program/) – Abhisek

7

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

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

-2

запись активации содержит следующие три вещей 1.Function определения 2.Variable определения 3.Function приложений (вызов функции)

Смежные вопросы