Seite 2 von 2
Re: Protected-Variablen werden im Vorraus deklariert?
Verfasst: 11.12.2014 20:41
von es_91
Deshalb passiert es hier öfter, dass der Speicher neu alloziert wird und der alte wieder freigegeben wird. Zum Beispiel, wenn du einen String ein gutes Stück verlängerst, indem du einen anderen String dran hängst. Dann wird zuerst neuer Speicher alloziert, beide Strings in diesen rein kopiert und dann der Speicher des alten Strings wieder freigegeben.
Da also der Computer zum Programmstart scheinbar doch nicht weiß, wieviel Speicher er tatsächlich braucht, warum werden Variablen überhaupt in ein Heap/Stack geschrieben? Warum werden Variablen nicht zur Laufzeit deklariert, warum werden sie, wenn ich richtig verstand, nicht in den RAM geschrieben und warum kann man sie nicht wieder "undeklarieren"?
Du siehst. Ich verstehe sehr langsam. Das, weil es eigentlich meine Art ist, hundertmal nachzufragen, aber meine Lehrer... ich glaube, Stacks kommen in der FI-Ausbildung erst im 3. Lehrjahr dran? Ich werde mir die Wikipedia-Artikel morgen mal anschauen, falls die Antwort da drin steht, könnt Ihr diesen Post ja erstmal offen lassen.
Schöne Grüße.
Re: Protected-Variablen werden im Vorraus deklariert?
Verfasst: 12.12.2014 05:38
von NicTheQuick
Der Stack und der Heap stehen natürlich im RAM. Wo auch sonst. Jeder Speicher, der irgendwo in Programmen benutzt wird, steht überlicherweise im RAM. (Dass dazwischen natürlich noch verschiedene Caches liegen und es auch virtuellen Arbeitsspeicher gibt, davon sehen wir hier mal ab, weil es an dieser Stelle keinen Unterschied macht.)
Ich hab doch gesagt, bei welchen Dingen er von Anfang an weiß wie viel Speicher er braucht. Nämlich bei der Deklaration aller nativen Variablentypen, außer dynamische Strings. Bei fixed Strings weiß er es logischerweise wieder, weil die sich im späteren Programmverlauf nicht mehr in ihrer Länge ändern können. Aber z.B. ein Long ist nun mal immer 4 Byte groß. Wenn du im Programm nun einmal "Define.l a, b" und wo anders "Global.l, c, d" schreibst, dann weiß der Compiler doch schon, dass er von Programmstart an auf jeden Fall schon mal 4 · 4 Bytes an Speicher reservieren kann, da diese auf jeden Fall gebraucht werden. Auf Variable a und b kann man im ganzen Mainscope zugreifen und auf Variable c und d im ganzen Programm, abgesehen von Modulen, die ihren eigenen Scope haben.
Aber da ich jetzt hier keine Vorlesung über Systemarchitektur und Compiler halten will, breche ich hier lieber ab, denn dir fehlen offensichtlich zu viele Grundlagen um zu verstehen. Dazu gibt es genug Material im Netz. Hast du den Rest von meinem Post trotzdem verstanden? Der Teil, den du von mir zitiert hast, spricht nur von Strings. Die sind eher vergleichbar mit Arrays und keine nativen Datentypen, wie sie der Computer kennt.