Aussie AI
Stack Usage
-
Book Excerpt from "Generative AI in C++"
-
by David Spuler, Ph.D.
Stack Usage
Stack storage refers to memory storage used for function calls, and includes (non-static) local variables, function parameters and system information used to keep track of function calls. Hence, the basic methods of reducing stack storage are:
- Use fewer and smaller automatic local variables.
- Use fewer and smaller function parameters.
- Use “
const&
” to pass objects by reference. - Use global or
static
local variables instead. - Reduce the depth of function call nesting.
- Avoid recursion (always).
Data sizes. The size of parameters and local variables can be reduced using the general methods of using smaller data types. Another method is to avoid passing large objects and to only large objects by reference (which is faster anyway). Don't use large arrays or buffers as local variables, but prefer allocated buffers or global buffers, or declare them as local static variables.
Fewer parameters. The number of parameters can be reduced by using global variables, or by packing a number of parameters into an object and passing the whole object (which is often faster, too).
Fewer local variables.
The number of local variables can be reduced by re-using
local variables, although this can introduce bugs if not enough care is taken. Common
examples of reusable variables are scratch variables, such as temporaries or for
loop
index variables. Another method of reducing the number of local variables is to use parameters as if they were local variables (this is safe because of call-by-value).
Overall, most of these suggestions are minor improvements, unless you're using
very large arrays or objects as local variables.
Flatten call hierarchies.
Reducing the depth of function call nesting (especially by avoiding recursion) also
reduces stack space requirements. This can be achieved by using preprocessor macros or
inline
functions (but this may increase code size).
You can also refactor your code to avoid too many layers of wrapping functions in interfaces.
Naturally, recursion should be
avoided as much as possible by using iterative loop algorithms or tail recursion elimination.
• Next: • Up: Table of Contents |
The new AI programming book by Aussie AI co-founders:
Get your copy from Amazon: Generative AI in C++ |