The article explains how the alloca function allocates memory from the stack. Contrary to some assumptions, alloca does indeed perform necessary stack probing using the _chkstk() function to prevent large allocations from skipping guard pages. An assembly example shows that both local frame creation and alloca() invoke the same __chkstk() routine. On x86-64, the process involves pushing registers, calling __chkstks for initial local frame setup, then adjusting the stack pointer before allocating the buffer. Finally, consume() accesses the newly allocated memory and cleans up the local frame. This dual-probing mechanism ensures stack integrity for dynamic-sized allocations.
The same __chkstk() function serves two purposes here: first during local frame construction when setting up the stack frame, and second immediately afterward when recalculating the stack pointer after the alloca() adjustment. This ensures that if a guard page check fails, the system can detect and handle violations properly. The code snippet demonstrates this flow clearly in assembly language, showing how the compiler handles temporary buffers safely.
Source: Hacker News · Summarized by HeadlinesBriefing