| Autor |
Beitrag |
hummel
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 31.05.05 17:33
Hallo Leute, bin neuling und nicht sonderlich bewandert in sachen Programmierung.
Habe die Aufgabe bekommen, ein Pascalprogramm für Delphi umzuwandeln.
Die Aufgabe habe ich auch soweit gelöst, doch tauchen in Pascal die Begriffe "mark(heapzgr)" & "release(heapzgr)" auf.
Das Programm thematisiert "Dynamische Zeiger" Es werden also Daten in den Speicher geschriebn und dynamisch verwaltet.
"release(heapzgr)" soll wohl den Speicher wieder Freigeben. Bin aber wie erwähnt kein Experte.
Hier ist der Quelltext soweit ich den habe.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type zeiger=^Elements; Elements=record Inhalt:Integer; next:zeiger; end; TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private public end;
var kopf:zeiger; heapzgr:^integer; Form1: TForm1;
implementation
{$R *.dfm}
procedure Aufbau(liste:zeiger; i,anzahl:integer); var p:zeiger;
begin if i < anzahl then begin new(p);p^.Inhalt:=random(1000);liste^.next:=p; Aufbau(p,i+1,anzahl); end else liste^.next:=NIL; end;
procedure Ausgabe (I:Integer; P:zeiger); begin if p <> NIL then begin Form1.Listbox1.items.add(inttostr(I)+inttostr(P^.inhalt)); Ausgabe (I+1, P^.next); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin new(kopf);kopf^.Inhalt:=random(1000); aufbau(kopf,1,1000); ausgabe(1,kopf); label1.Caption:='Momentan noch frei-->'+inttostr(getheapstatus.totalfree)+'Bytes'; end;
end. |
Moderiert von Motzi: Delphi-Tags hinzugefügt.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 31.05.05 18:03
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 31.05.05 18:17
Oh, das ist alter Kode...
Ein 'Heap' ist ja ein Haufen. (engl: Heap = Haufen).
Mit Mark (X) merkt man sich die aktuelle Höhe des 'Haufens'... Anschliessend nimmt man sich mit new(p) immer mal wieder ein Stück Speicher weg. Anstatt nun alle Stückchen per dispose(p) wieder an die Speicherverwaltung zurückzugeben, hat man einfach per Release(X) alle Stückchen auf einmal wieder freigegeben.
Also mit new/dispose:
Delphi-Quelltext 1: 2: 3:
| For i:=0 To 1000000 do New(p[i]); .... For i:=0 To 1000000 do Dispose (p[i]); |
mit mark/release
Delphi-Quelltext 1: 2: 3: 4:
| Mark (HeapPtr); For i:=0 To 1000000 do New(p[i]); .... Release (HeapPtr); |
Was F34r0fTh3D4rk aus Unwissenheit ('kA') vorschlug, war also völlig korrekt. 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 31.05.05 18:25
LOL  natürlich, hab doch immer recht
edit: meinst du das ernst ? 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 31.05.05 18:28
Prrfffmmmmt  Muhaaahaaa!
Wer macht jetzt meinen LCD wieder sauber? Da klebt überall das Feierabendbier...
edit: wat soll ick? Und, nenn mich nicht 'Ernst' 
Zuletzt bearbeitet von alzaimar am Di 31.05.05 18:29, insgesamt 1-mal bearbeitet
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 31.05.05 18:28
ich lieg auch unterm tisch, aber hab ich recht oder net
joah des funzt net, einfach mal weglassen, ja und hier ... 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 31.05.05 18:37
Das er das 'mark/release' weglassen kann? Yep.
(Is ja nich mein Programm, he he).
Nee, nee. Im Ernst.... Mark/Release ist tod. Begraben. Ein EX-Befehl. Ein sogenannter 'Schrödinger' (benannt nach dem zukünftigen EX-Kandesbunz).
|
|
hummel 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 31.05.05 22:00
Hey alzaimar, danke für die Hilfe, leider bin ich zu blöde um das Programm zum laufen zu bringen.
Könnte mal jemand den Sourcecode korekt umformen bzw. die nötige Änderung erledigen und komplett posten?
Wäre euch sehr bzw. demjenigen sehr dankbar.
|
|
|