aufgabe3 : halde (wie in uebung:) )

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

aufgabe3 : halde (wie in uebung:) )
Hallo :slight_smile:

Hab mal nen neuen thread aufgemacht für fragen zur lösung aus der uebung:)

und zwar steht in der aufgabenstellung, dass wlist05 sortiert werden können muss. wenn man eine ganz naive immpementierung von wsort und eine ganz naive realloc() hat, die alle zeilen einmal malloct, und für jede zeile ein realocc(oldlines, (nzeilen)sizeof(char)) macht, um sich fuer einen neuen pointer platzzumachen, werden dort 7973*(101+16) bytes für die zeilen belegt, was ja noch kein problem darstellt, aber dann werden in jedem realloc() alle pointer kopiert, und kein altes speicherstück passt, also wird es immer platz für einen pointe mehr kopiert.
dann werden nur für die pointer durch das neuanlegen (7973*(7973+1)/2)sizeof(char) = 254306808 bytes (bei 8byte pointerlaenge im cip) allokiert, was ja nicht ganz aufgeht (128MiB = 1<<27 = 134217728)

muss das realloc dann doch intelligenter sein?

Viele Grüße,
Jonathan


Wäre wahrscheinlich einfacher, die wsort in der Hinsicht zu optimieren (d.h. nicht pro Zeile ein realloc sondern z.B. immer den Speicher verdoppeln, wenn er voll ist), aber das kann eigentlich kaum Sinn dieser Aufgabe sein.


Die wlist05 war für eine naive 32-Bit wsort-Implementierung ausgelegt. Bei der Umstellung auf 64-Bit haben wir vergessen die Liste zu verkleinern.

Ab sofort befindet sich im pub-Verzeichnis eine neue (und kleinere) wlist05.

Nein.