Christian Seiler: Verständnisfrage zum Speicher

Beitrag lesen

Hallo Markus,

Folgedessen dachte ich eigentlich daran, auch Daten auf diese Weise abzulegen, aber offensichtlich habe ich das jetzt mit dem Stack verwechselt, da esp doch der Stack ist, oder verwechsle ich da nun wieder etwas?
Ich dachte daran, vielleicht dort irgendwie Daten reinzustopfen.

Also, wenn Du Dich für solche Interna interessierst, solltest Du Dir ein gutes Buch dazu durchlesen, z.B. http://www.drpaulcarter.com/pcasm/ (gibt's als PDF zum runterladen) Du scheinst da nämlich noch ziemlich verwirrt zu sein, was das angeht.

Wo Umgebungsvariablen abgelegt werden, ist nicht klar definiert, definiert ist nach ANSI C lediglich, dass es einen globalen Zeiger »environ« gibt, der auf die richtige Stelle zeigt. Die können auf dem Stack und die können auch auf dem Heap sein. Bei Dir sind sie offensichtlich auf dem Stack. Wenn Du Umgebungsvariablen modifizieren willst, modfizierst Du jedoch nicht diesen Teil des Stacks - setenv() fordert einen neuen Speicherbereich auf dem Heap an (per malloc() o.ä.), in den die neue Umgebungsvariable reinkopiert wird und ändert dann den entsprechenden Zeiger des environ-Arrays - falls eine neue Variable dazukommt, wird gleichzeitig ein neuer Speicherbereich für die Zeigerliste selbst angefordert.

Du kannst jedoch auch Daten auf dem Stack dynamisch ablegen. Dazu bieten viele UNIXoide Betriebsysteme eine Funktion alloca() an, die genauso wie malloc() aufgerufen wird. Allerdings ist auf einigen Systemen die Implementierung Buggy, auf anderen steht sie gar nicht zur Verfügung. Meines Wissens definieren aber weder POSIX noch SUS diese Funktion (zumindest hab ich im Stevens auf Anhieb keine derartige Angabe gefunden).

Viele Grüße,
Christian