53

What does it mean and how important to know about it for a C/C++ programmers?

Is it the same across the platforms, at least conceptually?

I understand it as a block of allocated memory used to store local variable by a function...

I want to know more

6
  • 8
    AKA stack frame - see en.wikipedia.org/wiki/Activation_record#Structure
    – anon
    Commented Aug 12, 2009 at 13:43
  • 1
    @Neil, your comment should have been the answer. Commented Aug 12, 2009 at 13:51
  • 1
    When you have too many of them, they generate a really cool website about programming questions. Commented Aug 12, 2009 at 13:55
  • 2
    Actually, he didn't, but I don't like posting answers that consist only of a wikipedia link.
    – anon
    Commented Aug 12, 2009 at 13:56
  • 3
    Frames for function call are not required to be implemented in stack. Both ISO C and ISO C++ mention nothing about "stack" except for "stack unwinding" in Clause 15 of ISO C++, which is basically "LIFO destruction of automatic objects", with nothing to do except for implementation details. Call stacks are actually allowed to be allocated from heap or other region of memory rather than ISA-specific stack.
    – FrankHB
    Commented Mar 24, 2016 at 4:04

4 Answers 4

69

An activation record is another name for Stack Frame. It's the data structure that composes a call stack. It is generally composed of:

  • Locals to the callee
  • Return address to the caller
  • Parameters of the callee
  • The previous stack pointer (SP) value

The Call Stack is thus composed of any number of activation records that get added to the stack as new subroutines are added, and removed from the stack (usually) as they return.

The actual structure and order of elements is platform and even implementation defined.

For C/C++ programmers, general knowledge of this structure is useful to understand certain implementation features like Calling Conventions and even why do buffer overflows allow 3rd party malicious code to be ran.

A more intimate knowledge will further the concepts above and also allow a programmer to debug their application and read memory dumps even in the absence of a debugger or debugging symbols.

More generally though, a C/C++ programmer can go by a large portion of their hobbyist programming career without even giving the call stack a moments thought.

2
  • @Alexandre Bell I understand from what you mention that the AR (stack frame) contains local vars, ret address and params. My question is: where is the code for the function being called stored? Commented Oct 1, 2016 at 16:44
  • 4
    @FernandoGabrieli There are different segments in C like code segment, stack segment, heap segment. so the function code will be stored on code segment. refer this
    – Abhisek
    Commented Jan 26, 2017 at 9:14
7

activation record isn't a concept that is used much in talking about C or C++ langauges themselves. The format of activation records is very much platform specific.

Conceptually, how parameters are passed, the lifetimes of local variables, where functions return to and how the call stack is unwound in response to an expection throw are all important parts of C++ and (with the exception of the latter C). The details of how these are implemented will affect what an activation record looks like for a particular platform but knowledge of this is not usually necessary for writing code in C++ or C.

5

When we call function, we need someplace to store callers and callees' context, this place is called activation record(AKA stack frame).

Yes, activation records compose call stack, however, that doesn't mean activation records must be stack-based. It is implementation specific.

You may wonder "Any examples?".

  • Of course, just take a look at IBM mainframes' stackless design, the stack is not available, its activation record is heap-based.
  • Opposite, there is also the platform which doesn't provide heap(AKA heap-less), e.g., Arduino(but it also means new keyword and new-expression cannot be used).
  • Apart from hardware limitation, some functional languages cannot store local variables on stack, so their activation records are allocated on heap, if you wonder the reason, here is a good reference.

Just like @FrakHB said, not only heap and stack, other regions of memory could also be activation record, that's what implementation specific means.

-4

The activation record contains the following three things

1.Function definition
2.Variable definition
3.Function application(function call)

Not the answer you're looking for? Browse other questions tagged or ask your own question.