Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File5.12.2 Malloc TOS Name: »memory allocation« - Speicherplatz reservieren. Gemdosnummer: 72 Deklaration: void *Malloc ( int32_t number ); Beschreibung: Die GEMDOS-Routine Malloc reserviert Speicherplatz, oder berechnet die Größe des verfügbaren Speichers. Für den Parameter number gilt: Wert Bedeutung -1 Länge des größten verfügbaren Blocks ermitteln sonst Anzahl der zu reservierenden Bytes Hinweis: Man darf sich nie darauf verlassen, daß tatsächlich so viele Bytes wie gewünscht alloziert wurden. Konstruktionen der Art Malloc(Malloc(-1L)) sind besonders in Multitasking-Systemen schlicht indiskutabel (Stichwort: Task-Wechsel). Unter TOS untersützt das GEMDOS nur eine begrenzte Anzahl von Speicherblöcke. Aus diesem Grund sollte man die Funktion nicht zu häüfig innerhalb eines Programms nutzen, sondern größere Speicherblöcke (mindestens 16KBytes) reservieren und selbst verwalten. Ferner sollte man folgende Punkte beachten: ∙ der Speicherblock muß nicht leer sein ∙ nacheinander allozierte Speicherblöcke müssen nicht zwingend zusammenhängen ∙ niemals auf Speicherbereiche zugreifen, der nicht dem eigenen Prozess gehört. In Systemen mit Speicherschutz kommt es sonst zu einer Exception. In MagiC wird dieser Aufruf auf Mxalloc mit den Modi 0 bzw. 3 zurückgeführt (abhängig von den Konfigurationsbits im Programmdatei-Header). Die Konfigurationsbits werden z.Zt. in der Basepage abgelegt. Ergebnis: Die Funktion liefert als Ergebnis die Anfangsadresse des reservierten Bereichs. Ein Nullzeiger bedeutet, daß nicht mehr genügend Speicher zur Verfügung steht. Im Fall number = -1 wird die Länge des größten verfügbaren Speicherblocks zurückgegeben. Verfügbar: Alle GEMDOS Versionen. GEMDOS Versionen kleiner 0.15 liefern für den Aufruf Malloc( 0L ) einen Zeiger auf ungültigen Speicher statt daß der Aufruf fehlschlägt wie er sollte. Gruppe: Speicherverwaltung Querverweis: Bindings für Malloc Mfree Mxalloc Maddalt Programmflags