( Chain-Q | 2022. 07. 25., h – 14:55 )

Szerintem a fordító egyszerűen lefoglalja a tömböt a függvénybe belépéskor. Az alternatíva az lenne, hogy minden iterációban, amikor a feltétel teljesül, akkor módosítja a stack pointert, de ezt meg nem szeretné. Futásidőre optimalizál, nem memóriára.

Ez konkrétan így van, és semmi köze az optimalizációhoz. C99 előtt a függvényeket mindig a függvény elején lehetett csak deklarálni, utána már a függvényen belül bárhol, de az egész blokkon belüli változódeklaráció csak syntax sugar, ill. így a fordító jobban segít, hogy ne használd a változót véletlenül a blokkon kívül (pl. inicializálás nélkül), de attól azok még ugyanúgy a függvényhez tartozó változók, és nem dinamikusan kerülnek foglalgatásra, tehát a bináris interfész és a stacklayout nem módosul ettől. A stackframe-et a fordító mindíg csak függvényhatáron számolja újra továbbra is, akár csak korábban (C99 előtt).