Ein Programm als Source-Code ist nur eine Sammlung von Text (Code, Erklärungen usw.) und es lebendig zu machen, bedarf es Maßnahmen, die auf dem Zielcomputer ausgeführt werden. Ein Programm benötigt Speicherressourcen, um Anweisungen auszuführen. Ein Programm enthält Namen für Verfahren, Kennungen usw., die Zuordnung mit dem aktuellen Speicherplatz zur Laufzeit benötigen.
Durch die Laufzeit, dass wir ein Programm in der Ausführung. Laufzeitumgebung ist ein Zustand, der Zielmaschine, die Softwarebibliotheken, Umgebungsvariablen, usw., um Dienstleistungen für die Prozesse in dem System ausgeführt bereitzustellen umfassen kann.
Laufzeit stützungssystem ist ein Paket, meistens mit dem ausführbaren Programm selbst erzeugt und erleichtert die Kommunikation zwischen dem Prozeß und der Laufzeitumgebung. Es kümmert sich um die Speicherzuweisung und Freigabe, während das Programm ausgeführt wird.
Ein Programm ist eine Folge von Befehlen in Kombination in eine Anzahl von Verfahren. Anleitung in einem Verfahren der Reihe nach ausgeführt. Ein Vorgehensweise hat einen Anfang und ein Ende-Trennzeichen und alles darin heißt der Körper des Verfahrens. Das Verfahren Kennung und die Reihenfolge der endlichen Anweisungen Inneren bilden den Rumpf der Prozedur.
Die Ausführung des Verfahrens ist seine Aktivierung bezeichnet. Eine Aktivierungsdatensatz enthält alle notwendigen Informationen benötigt, um eine Prozedur aufrufen. Eine Aktivierung Rekord können die folgenden Einheiten enthalten (je nach Ausgangssprache verwendet).
Provisorien | Speichert temporäre und Zwischenwerte eines Ausdrucks. |
Lokaldaten | Speichert lokalen Daten der aufgerufenen Prozedur. |
Gerätestatus | Speichert Maschinenstatus, wie Register, Programmzähler usw., bevor die Prozedur aufgerufen wird. |
Steuerlenker | Speichert die Adresse des Aktivierungssatz des Anrufers Verfahren. |
Zugangslink | Speichert die Informationen der Daten, die außerhalb des lokalen Anwendungsbereich ist. |
Aktualparameter | Speichert aktuellen Parameter, also Parameter, die verwendet werden für die Eingabe in der aufgerufenen Prozedur zu senden. |
Rückgabewert | Speichert Rückgabewert. |
Immer wenn ein Vorgang durchgeführt wird, dessen Aktivierungssatz auf dem Stapel gespeichert sind, die auch als Steuerstapels bekannt. Wenn eine Prozedur eine andere Prozedur aufruft, wird die Ausführung des Anrufers, ausgesetzt, bis die aufgerufene Prozedur die Ausführung beendet. Zu diesem Zeitpunkt wird die Aktivierungssatz der aufgerufenen Prozedur auf dem Stapel abgelegt.
Wir nehmen an, daß die Programmsteuerfluss in einer sequentiellen Weise, und wenn ein Verfahren aufgerufen wird, seine Steuerung ist zu der gerufenen Prozedur übergeben. Wenn eine gerufene Prozedur ausgeführt wird, kehrt die Steuerung zurück zum Aufrufer. Diese Art der Steuerfluss macht es einfacher zu repräsentieren, eine Reihe von Aktivierungen in Form eines Baumes, als Aktivierungsbaum bekannt .
Um dieses Konzept zu verstehen, nehmen wir ein Stück Code als Beispiel:
. . . printf(“Enter Your Name: “); scanf(“%s”, username); show_data(username); printf(“Press any key to continue…”); . . . int show_data(char *user) { printf(“Your name is %s”, username); return 0; } . . .
Unten ist der Aktivierung Baum aus die codes gegeben.
Jetzt verstehen wir, dass die Verfahren sind in Tiefen Weise durchgeführt, so stapeln Allokation ist die beste geeignete Form der Speicherung für Verfahren Aktivierungen.
Laufzeitumgebung Umgebung managt Laufzeitspeicherbedarf für die folgenden Entitäten:
Kodex : Es wird bekannt wie der Text Teil eines Programms, die zur Laufzeit nicht ändert. Seine Speicheranforderungen sind am Kompilierung bekannt.
Verfahren : ihre Textteil ist statisch, sondern sie werden in zufälliger Weise genannt. Deshalb, Stapel speicher wird verwendet, um Prozeduraufrufe und Aktivierungen verwalten.
Variablen : Die Variablen werden nur zur Laufzeit bekannt ist, es sei denn, sie global oder konstant sind. Heap Speicherzuordnungsschema ist für die Verwaltung und Zuweisung de-Zuweisung von Speicher für Variablen zur Laufzeit verwendet wird.
In diesem Allokationschema wird die Zusammenstellung daten zu einem festen Standort im Speicher gebunden, und es ändert sich nicht, wenn das Programm ausgeführt wird. Da die Speicherbedarf und Lagerplätze im Voraus bekannt sind, wird zur Laufzeit-Support-Package für die Speicherzuweisung und Freigabe nicht erforderlich.
Prozeduraufrufe und deren Aktivierungen durch Stapelspeicherzuordnung verwaltet. Es funktioniert in last-in-first-out (LIFO) Verfahren und diese Allokationsstrategie ist sehr nützlich für rekursiven Prozeduraufrufe.
Variablen Lokale einer Prozedur zugeordnet sind und die DE-zuge nur zur Laufzeit. Heap Zuweisung wird verwendet, um Speicher auf die Variablen dynamisch zuzuweisen und behaupten, sie zurück, wenn die Variablen nicht mehr erforderlich.
Mit Ausnahme statisch zugewiesenen Speicherbereich kann sowohl Stack und Heap-Speicher dynamisch wachsen und schrumpfen und unerwartet. Daher können sie nicht mit einer festen Speichermenge in dem System bereitgestellt werden.
Wie in der obigen Abbildung dargestellt, wird der Text Teil des Codes wird eine festgelegte Menge an Speicher zugewiesen. Stack und Heap-Speicher werden an den Extremen der Gesamtspeicher für das Programm angeordnet. Sowohl schrumpfen und wachsen gegeneinander an.
Das Kommunikationsmedium zwischen den Verfahren wird als Parameterübergabe bekannt. Die Werte der Variablen von einer rufenden Prozedur an die gerufene Prozedur durch einen Mechanismus übertragen. Bevor er vor, zunächst durch einige grundlegende Terminologie in Bezug auf die Werte in einem Programm zu gehen.
Der Wert eines Ausdrucks wird als seine r-Wert. Der Wert in einer Variablen enthalten auch zu einem r-Wert, wenn es auf der rechten Seite des Zuweisungsoperators erscheint. r-Werte können jederzeit zu einer anderen Variablen zugewiesen werden.
Die Lage des Speichers (Adresse), wo ein Ausdruck gespeichert wird, als L-Wert dieses Ausdrucks bekannt. Es scheint immer auf der linken Seite eines Zuweisungsoperators.
Zum Beispiel:
day = 1; week = day * 7; month = 1; year = month * 12;
Von diesem Beispiel wir dass verstehen Werte wie 1, 7, 12, und Variablen wie Tag, Woche, Monat und Jahr, haben alle r-Werte. Nur Variablen l-Werte, wie sie auch den Speicherort der ihnen übertragenen darstellen.
Zum Beispiel:
7 = x + y;
ist ein L-Wert-Fehler,wie die konstante 7 tut keinen vertreten jeder Speicher Lage.
Variablen, die die Information vom Anrufer Prozedur übergeben nehmen werden Formalparameter genannt. Diese Variablen sind in der Definition der aufgerufenen Funktion erklärt.
Variablen, deren Werte oder Adressen werden an die aufgerufene Prozedur übergeben werden Aktualparameter genannt. Diese Variablen werden im Funktionsaufruf als Argument angegeben ist.
Beispiel:
fun_one() { int actual_parameter = 10; call fun_two(int actual_parameter); } fun_two(int formal_parameter) { print formal_parameter; }
Formal-Parameter Halten Sie die Informationen über die tatsächlichen Parameter, abhängig von der Parameterübergabe-Technik verwendet. Es kann ein Wert oder eine Adresse sein
In der Wertübergabe-Mechanismus, die aufrufende Prozedur Pässe der r-Wert der aktuellen Parameter und der Compiler legt, dass in der aufgerufenen Prozedur Aktivierungssatz. Formalparameter dann halten die von der aufrufenden Prozedur übergebenen Werte. Wenn die Werte von den formalen Parameter gehalten geändert werden, sollte es keine Auswirkungen auf die aktuellen Parameter.
In der vergehen durch Referenz Mechanismus, der L-Wert der aktuellen Parameter wird zur Aktivierung Aufzeichnung der aufgerufenen Prozedur kopiert. Auf diese Weise hat die aufgerufene Prozedur nun die Adresse (Speicherstelle) des aktuellen Parameters und der formale Parameter bezieht sich auf den gleichen Speicherbereich. Wenn daher der Wert des formalen Parameters hingewiesen geändert wird, sollte die Auswirkung auf den Ist-Parameter gesehen werden, wie sie auch auf den gleichen Wert zeigen.
Diese Parameterübergabe-Mechanismus funktioniert ähnlich wie "Pass-by-reference", außer dass die Änderungen an aktuellen Parameter werden vorgenommen, wenn die aufgerufene Prozedur endet. Beim Aufruf der Funktion werden die Werte der aktuellen Parameter im Aktivierungsdatensatzes der aufgerufenen Prozedur kopiert. Formalparameter, wenn manipuliert haben keine Echtzeit-Effekt auf die aktuellen Parameter (wie l-Werte übergeben), aber wenn die aufgerufene Prozedur beendet ist, werden die L-Werte der formalen Parameter an die L-Werte der aktuellen Parameter übernommen.
Beispiel:
int y; calling_procedure() { y = 10; copy_restore(y); //l-value of y is passed printf y; //prints 99 } copy_restore(int x) { x = 99; // y still has value 10 (unaffected) y = 0; // y is now 0 }
Wenn diese Funktion endet, wird der L-Wert des formalen Parameters x auf die aktuellen Parameter y kopiert. Selbst wenn der Wert von y wird, bevor die Prozedur endet geändert, wird der L-Wert von x auf den L-Wert von y kopiert damit verhalten sich wie call by reference.
Sprachen wie Algol eine neue Art der Parameterübergabe-Mechanismus, funktioniert wie Preprozessor in C-Sprache . Im Pass von Namen Mechanismus wird der Name der Prozedur aufgerufen wird, indem die tatsächliche Körper ersetzt. Pass-by-Name textuell ersetzt die Argumentausdrücke in einem Prozeduraufruf für die entsprechenden Parameter in den Körper des Verfahrens, so dass es nun an aktuellen Parametern zu arbeiten, ähnlich wie die Übergabe als Referenz.