|
:Wenn man so argumentiert, muß man natürlich auch fragen: Welchen Nutzen haben lokale (Auto-)Variablen überhaupt? Wenn ich Speichermangel auf dem Stack habe, funktionieren die auch nicht mehr. Ob ich char "*c= alloca(74);" oder "char c[74];" schreibe, kommt platzmäßig auf dasselber heraus. Das ist IMHO ein immanentes problem jeder Programmierung... Daß ich keine 20MB an Speicher mit alloca allokieren kann, sollte klar sein. |
|
Die Notiz (Notices) trifft auf alloca() als Library-Funktion zu, sie trifft nicht zu,
wenn alloca() compiler-intern ist.
Lediglich die Portabilität ist dann eingeschränkt.
Folgende selbst entwickelte Funktion hatte es mir mal ermöglicht, den gcc2.8.1 zu kompilieren, mit einem Compiler, der alloca() nicht kennt: (Der Ersatz alloca.c mit malloc/free hatte zuvor nicht funktioniert!):
|
Ausblick auf C99-Compiler:
Heute mit gcc:
|
Zugehöriger Assembler:
|
--hs
Welchen praktischen Nutzen hat eine Funktion, die bei Speichermangel auf dem Stack ein undefiniertes Verhalten (d. h. meistens Programmabbruch) hat?