Woher weiß der das Programm/der Compiler(?) wo Variablen liegen?
-
Wenn ich z.B. in C/C++ eine lokale Variable anlege:
int main() { int a = 5; return 0; }
woher weiß das Programm eigentlich wo die Variable a im Speicher liegt? Er muss ja wissen wo sie liegt, sonst müsste er wieder ne Datenbank dafür anlegen
-
Das wird so gut wie immer über einen Stack geregelt. Der Compiler führt Buch und weiß jederzeit, an welcher Position sich eine Variable relativ zum Stackpointer befindet und so werden diese entsprechend auch adressiert.
Die Variable a in deinem Beispiel wird natürlich wegoptimiert, aber ich gehe mal davon aus, es ging ums Prinzip.
-
@Namenloser324
Der Compiler "macht" die Variable, also wird er wohl auch wissen können wo sie liegt.
Wie er das macht ist gänzlich seine Sache.
-
Athar schrieb:
Die Variable a in deinem Beispiel wird natürlich wegoptimiert, aber ich gehe mal davon aus, es ging ums Prinzip.
Stellt sich jetzt nur noch die Frage, warum nicht gleich das ganze Programm wegoptimiert wird, denn es tut ja nichts außer eine 0 zurückzuliefern.
-
Athar schrieb:
Das wird so gut wie immer über einen Stack geregelt. Der Compiler führt Buch und weiß jederzeit, an welcher Position sich eine Variable relativ zum Stackpointer befindet und so werden diese entsprechend auch adressiert.
Die Variable a in deinem Beispiel wird natürlich wegoptimiert, aber ich gehe mal davon aus, es ging ums Prinzip.
natürlich, wollte nur das ihr wisst wovon ich rede, hat aber anscheinend nicht so gut geklappt
und woher weiß der compiler dann welcher variablentyp da liegt? oder erstellt er für jeden typ einen neuen pointer?
-
Typ? Pointer? Du scheinst nichts von dem zu verstehen, wonach du fragst. Danach klang auch schon die Ursprungsfrage.
Der Compiler "macht" die Variable, also wird er wohl auch wissen können wo sie liegt.
Wie er das macht ist gänzlich seine Sache.+1
Lies dir ein beliebiges Assemblertutorial durch, dann sollte dir die Antwort sofort klar werden.
-
cooky451 schrieb:
Typ? Pointer? Du scheinst nichts von dem zu verstehen, wonach du fragst.
das ist wahr, na dann beherzige ich mal deinen tipp und les mir eins durch, danke
-
Da ganz sooo einfach ist das aber nicht.
Jetzt hat der Compiler eine .exe gemacht.
Die nehme ich mit an nen zweitrechner. Dort läuft sie auch. Aber ich Compiliere ja garnimmer
-
Ach was schrieb:
Da ganz sooo einfach ist das aber nicht.
Jetzt hat der Compiler eine .exe gemacht.
Die nehme ich mit an nen zweitrechner. Dort läuft sie auch. Aber ich Compiliere ja garnimmerja ich versteh jetzt nicht ganz dein problem.
richtig, unter windows laufen die meisten ausfürbaren programme auf den meisten pcs.
es ist also egal, ob du das auf windows 2000 oder windows 7 (32-bit) kompilierst.? was ist jetzt also das problem?
deine frage, wo die variablen liegen, die ist compilerabhängig. der eine compiler macht es so, der andere macht es eben so. soweit ich weiß, werden die variablen auf den stack gelegt.
-
Ach was schrieb:
Da ganz sooo einfach ist das aber nicht.
Jetzt hat der Compiler eine .exe gemacht.
Die nehme ich mit an nen zweitrechner. Dort läuft sie auch. Aber ich Compiliere ja garnimmer
-
Hahaha netter Thread. Diese Supercodes sollte man weiter entwickeln.
-
Namenloser324 schrieb:
woher weiß das Programm eigentlich wo die Variable a im Speicher liegt? Er muss ja wissen wo sie liegt, sonst müsste er wieder ne Datenbank dafür anlegen
An jeder Stelle wo die Variable benutzt wird, ist entweder ihre Position hardcoded (z.b. in einem Register, auf einer festen Speicherstelle oder relativ zu einem Pointer) oder es wird tatsaechlich eine "Datenbank" angelegt (z.b. in einer Scriptsprache waere das einfachste eine map von String auf Wert anzulegen).