1

Ich möchte verstehen, wie OOP Programmiersprachen unterscheidet sich von prozeduralen Sprachen in Bezug auf die Speichernutzung. Um genauer zu sein, nehmen wir an, wir sprechen über Java und C als Beispiele:Wie OOP-Sprachen unterscheidet sich von prozeduralen Sprachen in Bezug auf die Speichernutzung

  1. Ist es wahr, dass Objekte in heap automatisch gespeichert werden, während in prozeduralen Sprachen Sie müssen explizit die Heap-Nutzung definieren wie in C malloc ? Wenn ich ein Programm in C schreibe, erstellt OS eine virtuelle Seite dieses Programms einschließlich Heap und Stack-Speicher. Wenn ich malloc nicht in meinem Code verwende, bedeutet dies, dass mein Programm den zugewiesenen Heap nicht verwendet, ist das korrekt?
  2. Da Stack wird verwendet, um lokale Variablen und Funktionsaufruf Adressen zu speichern, was passiert, wenn ein Programm aus Stack-Raum lief, hat OS die Paging-Größe dieses Programm erweitern oder es nutzt nur den Heap als Erweiterung?
+0

Können Sie genauer angeben, über welche Sprachen Sie sprechen? Es ist schwierig, allgemeine Aussagen über * alle * imperativen Sprachen oder * alle * objektorientierten Sprachen zu treffen. Zum Beispiel ist C++ ein Hauptgegenbeispiel für einige der oben gemachten Aussagen. – EJoshuaS

+0

Vielen Dank .. Ich habe meine Frage aktualisiert – Kris

Antwort

0

Ist es wahr, dass Objekte im Heap automatisch gespeichert werden, während in prozeduralen Sprachen explizit die Heap-Nutzung wie in C malloc definieren müssen?

Das hängt von der Sprache ab. Einige wie Object Pascal erfordern, dass alle "Objekte" auf dem Heap zugewiesen werden. Andere, wie C++, erlauben es, dass Objekte in statisch, im Heap oder im Stapel existieren. Beide Ansätze haben Vor- und Nachteile.

Wenn ich ein Programm in C schreibe, erstellt OS eine virtuelle Seite dieses Programms einschließlich Heap- und Stack-Leerzeichen. Wenn ich malloc in meinem Code nicht verwende, bedeutet dies, dass mein Programm den dafür zugewiesenen Heap nicht verwendet, ist das korrekt?

Wahrscheinlich nicht. Es ist wahrscheinlich, dass die Laufzeitbibliothek den Heap hinter Ihrem Rücken verwendet.

Da Stack verwendet wird, um lokale Variablen und Funktionsaufrufadressen zu speichern, was passiert, wenn ein Programm den Stackraum auslässt, erweitert das Betriebssystem die Auslagerungsgröße dieses Programms oder verwendet es einfach den Heap als Erweiterung?

Das hängt vom Betriebssystem ab. Im Allgemeinen wird ein Betriebssystem versuchen, den Stapel zu erweitern, wenn dies möglich ist. t verwendet den Heap nicht, um den Stack zu erweitern. Stacks sind normalerweise an beiden Enden durch eine nicht zugängliche Seite geschützt (wie die erste Seite, die Nullzeiger abfängt). Die Wahrscheinlichkeit, dass der Stack ausläuft, ist eine Art Zugriffsverletzung.

Verwandte Themen