Also wer was wann tut wenn du ein Programm aufrufst hängt vom Betriebssystem (und natürlich der Programmiersprache) ab.
Eine Übersicht was bei Linux so passiert wenn du ein Programm aufrufst *bevor* main() drankommt (C++) steht hier:
http://linuxgazette.net/84/hawk.html
(via
http://stackoverflow.com/questions/46528…uns-before-main )
Es kommt auch drauf an wie du Speicher im Programm allokierst:
lokale Variable (plain old data) -> Stack, das steht dann im Assembler irgendwo in der main bevor du die Variable benutzt
globale Variable: -> Datensegment (sowas steht dann in init() die von __libc_start_main() oder so aufgerufen wird vor der main)
Konstante: -> Codesegment (Sowas wird bei fast allen OS per
mmap() in den virtuellen Programmspeicher gemappt, auch vor der main)
Objekte mit ctor: Heap: Wird per syscall (dauert lange) in der main angefordert
Nur als kleiner Einblick. Wenn du sowas genau wissen willst musst du dir entweder das Assembly angucken oder die Doku zum OS lesen.