Sprachen wie C|C++
-
Gibt es Sprachen ausser C und C++ bei denen man sich selbst um die Speicherverwaltung kümmern muss?
-
Ja:
[list]
phpBB-Error: List too long. Please refer to Google or Wikipedia before asking stupid questions with long answers.
[/list]
-
SeppJ schrieb:
Ja.
Ja, ich war undeutlich:
Welche?
-
Kennst du google?
-
meinefresse schrieb:
Kennst du google?
Gib mal Suchbegriff.
-
Ethon schrieb:
meinefresse schrieb:
Kennst du google?
Gib mal Suchbegriff.
wikipedia list of programming language
Viel Spaß bei Durchsuchen
-
Na wieviele gibts denn wirklich? Die ganzen alten Sprachen haben natürlich meistens keine automatische Speicherverwaltung. Seit Java ist Garbage Collection im Mainstream, seitdem dürfte es kaum neue Sprachen ohne geben. Wenn wir auch noch Spielzeugsprachen ausschließen, bleibt es bei nur wenigen: Objective-C, wenn man das nicht schon unter C zählt. Pascal ist zu alt, aber Delphi hat m.W. auch keine Garbage Collection, Ada normalerweise auch nicht.
-
Bashar schrieb:
Na wieviele gibts denn wirklich? Die ganzen alten Sprachen haben natürlich meistens keine automatische Speicherverwaltung. Seit Java ist Garbage Collection im Mainstream, seitdem dürfte es kaum neue Sprachen ohne geben. Wenn wir auch noch Spielzeugsprachen ausschließen, bleibt es bei nur wenigen: Objective-C, wenn man das nicht schon unter C zählt. Pascal ist zu alt, aber Delphi hat m.W. auch keine Garbage Collection, Ada normalerweise auch nicht.
Spielverderber.
Jetzt ist alles ausgeplaudert.
-
Wenn man genau sein will, ist eine Unterscheidung zwischen Speicherverwaltung und Speicherbereinigung sinnvoll. So gesehen kann man auch in C auf automatische Speicherverwaltung zugreifen, nur um das Freigeben muss man sich selbst kümmern.
Sicherlich gibt es auch Leute, die Speicherbereinigung als Teilbereich der Speicherverwaltung ansehen würden. Aber im engeren Sinne bezeichnet dieser Begriff nur die Vergabe/Aufteilung des Speichers (z.B. durch das Betriebssystem).
-
@Pedant:
Könntest du bitte den Unterschied zwischen Speicherverwaltung und Speicherbereinigung definieren?Ich weiss nämlich nicht was damit gemeint sein soll.
-
Er scheint unter "Speicherverwaltung" nur zu verstehen, was die Hardware-MMU kann. Denn sie ist ja die memorymanagementunit. Und im weiteren Sinn, wie ein BS Segmente an die Programme vergab. Und in einem esoterisch-kombinierten Sinn, wie es heute üblich ist. Ein wenig verquer.
Wie die Alten, die Syntax, Semantik, Pragmatik mit Gewalt trennen wollten. In den 80-er Jahren stand das in jedem Programmier-Lehrbuch. Nur hatte der Lerner gar nichts davon. Bevor dazu Fragen kommen: Alle drei sind nur Übersetzungen einer Sprache in die andere. Sozusagen drei Syntaxen. Faktisch trennt man nicht so, und hat nicht drei unverwobene Schichten. Weder Menschen, die programmieren, noch Compiler und Interpreter tun sowas.
-
Hm. Könntest Recht haben. Würde ich dann für mich in die Kategorie sinnloser Bullshit stecken.
-
hustbaer schrieb:
Hm. Könntest Recht haben. Würde ich dann für mich in die Kategorie sinnloser Bullshit stecken.
Siehe auch hier
-
Stichwort: Speicherfragmentierung. Ohne Mechanismen die dem entgegen wirken läuft man bei lang laufenden Prozessen früher oder später in das Problem der Speicherfragmentierung. Alte Speicherverwaltungen konnten das nicht lösen, moderne GCs haben Mechanismen dagegen. Das könnte man imho sehr wohl als Speicherbereinigung bezeichnen und streng genommen hat das nichts mit der reinen Speicherverwaltung zu tuen, weil bei der Speicherbereinigung nichts malloced/freed wird sondern Speicherblöche nur herumgeschoben werden, ohne das die Applikationen davon etwas mitbekommen.
-
Bashar schrieb:
Objective-C
Objective-C hat mittlerweile auch einen Garbage Collector.
-
loks schrieb:
Stichwort: Speicherfragmentierung. Ohne Mechanismen die dem entgegen wirken läuft man bei lang laufenden Prozessen früher oder später in das Problem der Speicherfragmentierung. Alte Speicherverwaltungen konnten das nicht lösen, moderne GCs haben Mechanismen dagegen. Das könnte man imho sehr wohl als Speicherbereinigung bezeichnen und streng genommen hat das nichts mit der reinen Speicherverwaltung zu tuen, weil bei der Speicherbereinigung nichts malloced/freed wird sondern Speicherblöche nur herumgeschoben werden, ohne das die Applikationen davon etwas mitbekommen.
Schwachfug.
Eigene Speicherverwaltung schon mal gehört? Man reserviert direkt zu anfang einen hübschen Haufen Speicher und nutzt diesen dann durchgehend. Dadurch bleibt der Speicher in einem Block. Oder noch schöner, man erhöht die maximale Stackgröße, reserviert wieder Speicher auf dem Stack und fertig. Und wenn der Speicher voll ist, kann man immer noch kleinere Anfragen starten, weil die Fragmentierung allein durch diesen Block kleiner gehalten wird. Die SmartHeapLibrary verwendet so was zum Beispiel ...
-
_matze schrieb:
Bashar schrieb:
Objective-C
Objective-C hat mittlerweile auch einen Garbage Collector.
Der ist so optional wie der von C oder C++.
-
Der aus dem Westen ... schrieb:
Eigene Speicherverwaltung schon mal gehört? Man reserviert direkt zu anfang einen hübschen Haufen Speicher und nutzt diesen dann durchgehend. Dadurch bleibt der Speicher in einem Block.
Nö, loks Einwand ist nicht ungerechtfertigt. Was soll die Präallokation bringen? Wie du den Speicher zwingend "durchgehend" reservieren willst, ist mir schleierhaft, Fragmentierung gibt es nun mal. Es geht ja darum, dass im virtuellen Raum dann z.B. keine 200 MB am Stück mehr frei sind. Einfach weil überall verteilt ein paar kleine Objekte mit fixer Adresse herumliegen könnten. In der Praxis hat mich das aber noch nie beeinträchtigt.
-
-
loks schrieb:
Das könnte man imho sehr wohl als Speicherbereinigung bezeichnen und streng genommen hat das nichts mit der reinen Speicherverwaltung zu tuen, weil bei der Speicherbereinigung nichts malloced/freed wird sondern Speicherblöche nur herumgeschoben werden, ohne das die Applikationen davon etwas mitbekommen.
Und wie das was mit der Speicherverwaltung zu tun hat!
Wie willst du einen Heap denn "kompaktieren", wenn du nicht weisst welche Blöcke belegt sind?Und diese Info ist noch nichtmal ausreichend. Du musst auch sämtliche Referenzen/Zeiger im ganzen System kennen, damit du diese anpassen kannst.