Untyped Allocations: In C/C++ untyped allocations such as malloc, calloc, and realloc can easily be used to create overlays, which again require translation overhead to keep the corresponding non-overlaid objects consistent.
Most coding guidelines for safety-critical software discourage the use of such dynamic memory allocations, particularly after initialization. Such memory allocations and the corresponding garbage collections can result in unpredictable behavior that could significantly affect both the performance and the verifiability of the code.
Applications that operate within a fixed, pre-allocated area of memory can avoid many of the problems associated with mishandling of memory allocations or de-allocations such as:
- Forgetting to free the memory
- Using memory after it was freed
- Attempting to allocate more memory than physically available
- Overstepping boundaries on allocated memory
These applications are much easier to verify for memory-related properties and to prove that they can always operate within the available resource bounds.