Hi, da ich noch etwas in den Anfängen mit C stehe mal eine Frage an die Profs. Die Funktion unten reserviert Dynamisch und NICHT zur compile Zeit ein unsigned char array. Wo wird dieses eigentlich abgelegt? Stack oder RAM? Ist es sinnvoll so etwas zu machen oder doch eher zu riskant? Der Compiler bringt zumindest keine Warnung. void foo ( unsigned char Test ) { unsigned char MyBuffer[Test]; }
> Wo wird dieses eigentlich abgelegt? > Stack oder RAM? Auf dem Stack. Und der liegt im RAM. ;-) > Ist es sinnvoll so etwas zu machen oder doch eher zu > riskant? Das hängt davon ab, was du damit machen willst. Du kannst natürlich dein Array statisch allozieren, dann ist der zugehörige RAM ein für allemal dafür reserviert, egal ob er gerade gebraucht wird. Dafür hat das entsprechende Objekt eine unendliche Lebenszeit. Bei einer dynamischen Zuteilung musst du halt sauber analysieren, dass du stets genug freien RAM zur Verfügung hast. Dabei ist es in erster Linie unerheblich, ob die Belegung auf dem Stack erfolgt (wie hier) oder auf dem Heap (malloc()), die Stack-Variante hat lediglich den Vorteil, dass sie nicht fragmentieren kann: die Objekte werden beim Verlassen der Funktionen von unten nach oben wieder abgeräumt, damit steht immer wieder ein zusammenhängender Speicherblock (für den Stack neuer Funktionen) zur Verfügung. Aber damit sollte dir natürlich auch der größte Pferdefuß soeben klar geworden sein: MyBuffer[] existiert nur innerhalb von foo(), danach ist der entsprechende Speicher nicht mehr reserviert und wird dem nächsten Bedürftigen auf Antrag verteilt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.