2009-08-12 72 views
24

¿Qué significa y qué tan importante es saberlo para los programadores de C/C++?¿Qué es el registro de activación en el contexto de C y C++?

¿Es lo mismo en las plataformas, al menos conceptualmente?

lo entiendo como un bloque de memoria asignada se utiliza para almacenar la variable local por una función ...

Quiero saber más

+7

marco de pila AKA - ver http://en.wikipedia.org/wiki/Activation_record # Structure –

+1

@Neil, tu comentario debería haber sido la respuesta. –

+0

Estoy de acuerdo, pero creo que @LB lo venció :) – vehomzzz

Respuesta

33

un registro de activación es otro nombre para el marco de pila . Es la estructura de datos que compone una pila de llamadas. En general se compone de:

  • Los locales para el destinatario de la llamada
  • dirección
  • volver a la llamada
  • Parámetros del destinatario de la llamada

la pila de llamadas está integrado por cualquier número de registros de activación que se agregan a la pila a medida que se agregan nuevas subrutinas, y se eliminan de la pila (generalmente) a medida que regresan.

La estructura real y el orden de los elementos es la plataforma e incluso la implementación definida.

Para los programadores de C/C++, conocimiento general de esta estructura es útil para comprender ciertas funciones de implementación como convenciones de llamadas e incluso por qué los desbordamientos de búfer permiten que se ejecute código malicioso de terceros.

A más conocimiento íntimo ampliará los conceptos anteriores y también permitirá a un programador depurar su aplicación y leer los volcados de memoria incluso en ausencia de un depurador o símbolos de depuración.

Más en general, un programador de C/C++ puede utilizar una gran parte de su carrera de programación de aficionados sin siquiera pensar en la pila de llamadas.

+0

@Alexandre Bell Entiendo por lo que mencionas que el AR (estructura de pila) contiene vars locales, dirección ret y params. Mi pregunta es: ¿dónde se almacena el código de la función? –

+3

@FernandoGabrieli Hay diferentes segmentos en C como segmento de código, segmento de pila, segmento de montón. por lo que el código de función se almacenará en el segmento de código. refiera [esto] (http://www.geeksforgeeks.org/memory-layout-of-c-program/) – Abhisek

7

registro de activación no es un concepto que se utiliza mucho al hablar sobre C o C++ langauges ellos mismos. El formato de los registros de activación es muy específico de la plataforma.

Conceptualmente, cómo se pasan los parámetros, la vida útil de las variables locales, dónde vuelven las funciones y cómo se desenrolla la llamada en respuesta a un lanzamiento de expección son partes importantes de C++ y (con la excepción de C) . Los detalles de cómo éstos se implementan afectará a lo que un registro activación se parece a una plataforma en particular pero el conocimiento de esto no suele ser necesaria para escribir código en C++ o C

-2

El registro de activación contiene las siguientes tres cosas 1.Function definición definición 2.Variable 3.Function aplicación (llamada de función)

Cuestiones relacionadas