Software > Coding

Abfrage freier Speicher / TOS 2.06

<< < (2/10) > >>

1ST1:

--- Zitat von: Rainer (s) am Mo 29.04.2013, 22:54:30 ---Nee, das isses nich.
Die gibt ja nur die Größe des größten zusammenhängenden Speicherblocks zurück.
Ich möchte aber den gesamten freien Speicher abfragen ;-)

--- Ende Zitat ---

Vorgehensweise:

Mit malloc(-1) den größten freien Speicherbereich ermitteln, diesen Speicher allozieren und merken wieviel das war. Dann wieder malloc(-1) und den Speicher allozieren und zum gemerkten Speicher dazuaddieren. Das solange wiederholen, bis malloc(-1) Null zurückliefert, anschließend den ganzen allozierten Speicher wieder frei geben.

rainers:
@1ST1: Das ist Dein Ernst? Du glaubst wirklich, daß TOS (2.06) und MagiC (6.20) auf diese Art und Weise vorgehen?
Solange Du mir hier nicht ein seriöses Programmbeispiel lieferst, glaube ich das nicht.

Schreib doch nicht immer nur so vor Dich hin, mach doch irgendwas mal ganz konkret. Für einen ATARI-GOTT wie Dich muß doch das aus dem Ärmel geschüttelt sein.  8) 8) 8) 8) 8) 8) 8) 8)

1ST1:
Ich liege schon im Bett. Ich schätze aber, eine andere Wahl hast du nicht, wenn du es tatscächlich wissen willst. GEMDOS sieht scheinbar keine andere Funktion vor. Im Sinne von möglichem Multitasking sollte dein Programm aber immer nur so viel dazu allozieren, wie du absehbar brauchst. Die Strategie "ich hol mir jetzt mal allen Speicher an Land" macht höchstens in Single-Tasking-TOS Sinn, aber auch nur wenn keine ACCs geladen werden, die dynamisch bei Bedarf auch zusätzlichen Speicher anfordern. Unter MiNT/Magic verbaust du dir damit jegliche Multitasking-Kooperation.

Siehe auch Profibuch Seite 251-256 zu den Speicherfunktionen malloc, mxmalloc, mfree und mshrink.

mfro:

--- Zitat von: Rainer (s) am Mo 29.04.2013, 23:40:12 ---@1ST1: Das ist Dein Ernst? Du glaubst wirklich, daß TOS (2.06) und MagiC (6.20) auf diese Art und Weise vorgehen?

--- Ende Zitat ---

Doch, das stimmt schon. So wird's gemacht. Was anderes ist nicht vorgesehen.

AltF4:

--- Zitat von: mfro am Di 30.04.2013, 06:33:05 ---Doch, das stimmt schon. So wird's gemacht. Was anderes ist nicht vorgesehen.

--- Ende Zitat ---

Um hier noch eine Erklärung nachzuschieben:  Deine Fragestellung bezog sich ja laut Thread-Titel auf Tos 2.06.  Und dort ist tatsächlich keine andere Möglichkeit vorgesehen.  Bei MiNT gibt es m.Wn. schon die Möglichkeit, die Anzahl freier Mem-Pages abzufragen (und die Größe einer Page natürlich auch).  Und bei Magic dürfte es das auch geben, irgendwie.  Aber um Details zu nennen, bin ich da leider schon zu lange raus aus dem Theme.

Aber abgesehen von der Möglichkeit, solches in Erfahrung zu bringen, um seine Neugierde zu befriedigen, hat die Kenntnis darüber keinen echten Nutzen. Das liegt daran, das TOS (genauso wie MiNT und Magic) keine virtuelle Speicherverwaltung beherrschen.  Dadurch wird der Speicher nach längere Uptime irgendwann so fragmentiert, dass nur noch kleine "Speicher-Fitzelchen" zur Verfügung stehen.  Und wenn Du dann doch mal 32k zusammenhängenden Speicher brauchst, aber nur noch 1000 einzelne freie Pages mit immerwieder dazwischenliegenden benutzten Pages vorfindest, wirst Du feststellen, dass Malloc(-1) für den größtverfügbaren Speicherblock doch dein Freund ist.

Ich hoffe, ich habe mich soweit verständlich ausgedrückt, ohne zu sehr theoretisch zu werden  :-))

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln