RUN-TIME STORAGE MANAGEMENT
The information which required during an execution of a procedure is kept in a block of storage called an activation record. The activation record includes storage for names local to the procedure.
We can describe address in the target code using the following ways:
- Static allocation
- Stack allocation
In static allocation, the position of an activation record is fixed in memory at compile time.
In the stack allocation, for each execution of a procedure a new activation record is pushed onto the stack. When the activation ends then the record is popped.
For the run-time allocation and deallocation of activation records the following three-address statements are associated:
- Call
- Return
- Halt
- Action, a placeholder for other statements
We assume that the run-time memory is divided into areas for:
- Code
- Static data
- Stack
Static allocation:
1. Implementation of call statement:
The following code is needed to implement static allocation:
Where,
callee.static_area shows the address of the activation record.
callee.code_area shows the address of the first instruction for called procedure.
#here + 20 literal are used to return address of the instruction following GOTO.
2. Implementation of return statement:
The following code is needed to implement return from procedure callee:
It is used to transfer the control to the address that is saved at the beginning of the activation record.
3. Implementation of action statement:
The ACTION instruction is used to implement action statement.
4. Implementation of halt statement:
The HALT statement is the final instruction that is used to return the control to the operating system.
Stack allocation
Using the relative address, static allocation can become stack allocation for storage in activation records.
In stack allocation, register is used to store the position of activation record so words in activation records can be accessed as offsets from the value in this register.
The following code is needed to implement stack allocation:
1. Initialization of stack:
2. Implementation of Call statement:
Where,
caller.recordsize is the size of the activation record
#here + 16 is the address of the instruction following the GOTO
0 Comments