Jan Rakelmann schrieb:
Schau Dir mal an, wie malloc Speicher alloziert und Lücken ausnutzt. Halte aber eine große Tüte bereit...
Bis jetzt habe ich den Debugger nicht gebraucht. Du kannst mir aber gern mal ein Beispiel schicken. Ich bin offen und seh mir sowas gern an.
Ich habe kein Beispiel, ich weiß nur, daß die Verwaltung der free-list, bei malloc meistens eine sehr aufwändige Sache ist.
Mit GC wird nur allokiert. Ich halte dies für eine ganz schlechte Wahl, weil der Programmierer dann eher leichtsinnig wird.
Warum?
Weil die Müllentsorgung irgendwelchen Algorithmen überlassen wird die dies nur halbherzig machen.
Ich kenne nicht die ganzen Theorien hinter GCs, aber mMn. läuft das bei den meisten so, dass diese bei Erreichen einer bestimmen Speicherauslastung anfangen nach Objekten zu suchen, auf die keine Referenzen mehr zeigen. Wenn Du Speicher mit free/delete frei gibst, wird auch nur der Block als frei markiert, aber noch nicht wieder verwendet, bis malloc keinen Speicher mehr hat. Dann geht es seine Strukturen durch und sucht nach freien Stellen. Im Endeffekt ist es keineswegs schneller damit als ein vernünftiger GC. Ich weiß allerdings nicht ob alle mallocs so implementiert sind oder ob das gar eine veraltete Information ist, aber prinzipiell dürfte das hinkommen...
Hab mir neulich mal per Azureus ein Buch stibitzt, und nebenbei noch etwas TeX gemacht, dann stand die Kiste aufeinmal still. Für so einen Kram ist ein 2,8 GHz Sempron nicht ausgelastet! Sowas kann nicht sein.
Dann ist der GC (wenn er denn Schuld ist) Scheiße.
Wenn ich in Fortran z.B. folgendes mache:
INTEGER, DIMENSION(n:n), ALLOCATABLE :: A ! bin eine nxn-Matrix
Mathematiker? Fortran nutzt letzlich untendrunter auch nur malloc...
Viele Grüße, Eric