4 ms·
tl;dr - alloca costs, history, and why it is problematic Alloca is somewhat more expensive on x86/x64 than a single instruction. [0] shows the code generation
by tjalfi 10y ago
tl;dr - alloca costs, history, and why it is problematic
Alloca is somewhat more expensive on x86/x64 than a single instruction.
[0] shows the code generation for four functions that generate and sum an iota array. I used -O1 to make the differences more apparent.
iota_sum_alloca and iota_sum_vla generate similar code. They both require a frame pointer (RBP) and code to preserve the 16 byte alignment of the stack frame.
iota_sum_const_alloca and iota_sum_array generate identical code. Clang recognizes that alloca is invoked with a constant argument.
History of Alloca
Alloca was originally written for unix V7 [1]. Doug Gwyn wrote a public domain implementation [2] in the early 80s for porting existing programs. The FSF used Gwyn's alloca implementation in GDB, Emacs, and other programs. This helped to spread the idea.
Problems of Alloca
[3] is a comp.compilers thread that discusses some of the issues with alloca. Linus does not want either VLAs or alloca in the Linux kernel [4].
References:
[0] https://godbolt.org/g/1JyXhQ https://godbolt.org/g/1JyXhQ
[1] http://yarchive.net/comp/alloca.html http://yarchive.net/comp/alloca.html
[2] https://github.com/darchons/android-gdb/blob/android-gdb_7_5/gdb/gnulib/import/alloca.c https://github.com/darchons/android-gdb/blob/android-gdb_7_5...
[3] http://compilers.iecc.com/comparch/article/91-12-079 http://compilers.iecc.com/comparch/article/91-12-079
[4] https://groups.google.com/forum/#!msg/fa.linux.kernel/ROgkTBO4VYI/sQZN3R9bEV4J https://groups.google.com/forum/#!msg/fa.linux.kernel/ROgkTB...
Edited for minor formatting changes.
- tjalfi 10y agohttps://godbolt.org/g/XKAZOb https://godbolt.org/g/XKAZOb fixes the bugs in the sample code in the parent post. If you compile with -O2 then iota_sum_const_alloca and iota_sum_array are both evaluated at compile time.