On Thu, 2004-01-22 at 17:17, Philipp Otte wrote:
Hi Leute, wenn ich jetzt ein c++-Programm mit gcc übersetze, implementiert der dann auch Routinen in das Programm rein, die den Speicher für den Stack selbst allokieren oder muss das vom Betriebssystem übernommen? Diese Frage verstehe ich nicht.
Und ich hab mal gelesen, dass eigentlich gar nicht die main()-Funktion zuerst aufgerufen wird, So ist es. Etwas vereinfacht und sehr allgemein ausgedrückt, wird beim Start eines Programmes ein Startup-Code abgearbeitet, der diverse Vorgänge auslöst, an deren _Ende_ main() aufgerufen wird.
Was dabei im Detail abläuft, kann relativ komplex sein (Das ist es unter x86-Linux auch) und ist hochgradig von der Architektur, vom OS, vom Compiler und von der verwendeten Programmiersprache abhängig.
sondern eine andere kleine, die eben irgendwelche Aufgaben, ich glaube z.B. globale Variablenzuweisung und so etwas macht und die dann im Anschluß die eigentlich main() aufruft.
Nachdem Du aber von C++ und globalen Variablen sprachst, vermute ich dass Du Dich eigentlich auf die Constructor/Destructor-Listen/Arrays (Im gcc-Jargon: ctors/dtors) beziehst. Diese werden vom Compiler angelegt, und vom Startup-Code beim Start von C++Programen abgearbeitet, um statische, globable Variablen, die Konstruktoren verwenden, zu initialisieren (Statische, globale C-Variablen verwenden keine Konstruktoren und werden zum Zeitpunkt der Übersetzung angelegt). Mit dem Programm-Stack hat das allerdings nichts zu tun.
Stimmt das und wenn ja, wie kann man diese Funktion verändern? Wozu? Was hast Du vor? Es gäbe einige Möglichkeiten dort einzugreifen, aber alle auf sehr niedriger Ebene, die ehe in die Rubrik "Schmutzige Tricks" fallen. Ein "normales Program" hat dort normalerweise nichts verloren und ein "normaler Programmier" will dort normalerweise auch nicht hin ;)
Ralf