Sprachen wie C|C++
-
@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.
-
Artchi schrieb:
Ja, nettes Teil.
Hat jetzt inwiefern was mit dem hier diskutierten zu tun?
-
Optimierte Speicherverwaltung für C++? Ihr schreibt, das ihr das selber implementieren würdet, um das Maximum raus zu holen. Ich sage, ich würde was fertiges benutzen/kaufen. Und laut c't-Test bringt SmartHeap sogar was.