Produkte >> CXI >> Online-Hilfe >> CXI-Basis-Programmierreferenz Sprung zum Seitenende
Allgemeines Online-Hilfe Preisliste Download

CXI-Basis-Programmierreferenz / Version 2 / Unterstützte Systeme / OS/2 /

  Struktur Themen A...Z Titel << >>

Speicherverwaltung unter OS/2

[OS/2] [Keine Portabilität!] Speicherverwaltung unter OS/2

Die OS/2-Version des CXI-Basissystems kann zwei verschiedene Varianten der Speicherverwaltung nutzen:

- 1. Die bis Version 2.06 eingesetzte Variante unterteilt einen Block fester Größe in variabel große Speicherbereiche je nach Anforderung. Diese 'Heap'-Verwaltung wird auch von den meisten Compilern für den Heap benutzt. CXI ruft Betriebssystemfunktionen (DosSubAllocMem u.s.w.) für diese Art der internen Speicherverwaltung auf. Da allokierte Bereiche verschieden groß sind, können im Heap Löcher entstehen, die unter Umständen zum unkontrollierten Wachsen des Speicherbedarfs führen.

- 2. Die 'Pool'-Verwaltung ist ab Version 2.07 hinzugekommen. Hierbei wird ein Pool von Datenblöcken fester Größe angelegt. Jede Speicheranforderung bekommt einen Block der nächsthöheren Größe zugeteilt. Es erfolgt keine Aufsplittung der vorhandenen Blöcke. CXI besitzt insgesamt acht Teil-Pools, die jeweils Speicherblöcke gleicher Größe beinhalten. Da alle Speicherbereiche nur fest vorgegebene Größen besitzen können und immer komplett zugeordnet und freigegeben werden, treten bei dieser Methode keine Löcher auf.

Die Speicherverwaltung kann über die Umgebungsvariable CXIPOOLSIZE gesteuert werden:

SET CXIPOOLSIZE=xxx,yyy,zzz

Ist diese Variable nicht gesetzt, wird CXIPOOLSIZE=0,0,0 angenommen.

Die Auswertung der Variablen erfolgt jeweils beim Start eines Prozesses, der CXI verwendet. Bei xxx == 0 wird die zweite Methode (Pool) verwendet, yyy ist dann ohne Bedeutung. Andernfalls sind die Angaben xxx und yyy Dezimalzahlen, wobei xxx (1 bis 240) die Maximalgröße des Heaps pro Prozess angibt (in MB), yyy (0 bis 240) ist optional und gibt den Abstand des CXI-Heaps vom Heap des Laufzeitsystems an. Die Summe von xxx und yyy darf ebenfalls nicht 240 überschreiten.

Der optionale Wert zzz (0 bis 3) bestimmt die Fehlerbehandlung, Fehler der Stufen 1 bis zzz werden ausgegeben und führen zum Programmabbruch, bei zzz=0 (Vorgabe) werden keine Meldungen generiert.

Die Fehlermeldung hat folgende Form:
[Bild]

Nach Auswahl von "Registerinformationen anzeigen" erscheinen Details:
[Bild]

Dieses Fenster enthält folgende Angaben, die von Bedeutung für die Fehlersuche sind:

Fenstertitel:
Hier steht der Name des Anwendungsprogramms oder der Sitzung, in dem/der die Fehlersituation aufgetreten ist

Zweite und dritte Zeile:
Der Name des Moduls und die Nummer der Exception (im Beispiel e6014921 in CXIBOSYS.DLL) kennzeichnen den Fehler als eine von CXI generierte User-Exception. Die Nummer beginnt immer mit den Zeichen 'e601', die hinteren 4 Ziffern bilden - als Dezimalzahl gelesen - eine Fehlernummer (CxiError), hier 4921. Die Adressangaben (nach dem Wort 'bei' und in der folgenden Zeile) sind für die Fehlersuche irrelevant.

Parameter:
Die Bedeutungen der Exception-Parameter P1 bis P4 sind abhängig von der Fehlernummer.

Register:
Die folgenden Register enthalten Informationen zur aktuellen Umgebung des CXI-Systems:
EBX = Adresse des Speicherpools
ECX = Größe des Speicherpools
EDX = Momentan benutzte Größe des Speicherpools
ESI = Adresse des Pools für kleine Puffer
EDI = Vollständige Revisionsnummer der CXI-Basis

In der folgenden Abbildung sind die relevanten Angaben farblich hervorgehoben:
blau = Erkennungsmerkmale für eine CXI-Exception
rot = Fehleridentifikation (Nummer und Version)
grün = Weitere Angaben zur Fehlersituation.

[Bild]

Der Speicherpool von CXI kann auch für eigene systemunabhängige Programme oder Programmteile verwendet werden, hierzu existiert ein eigener Satz von Speicherverwaltungsfunktionen.

Siehe auch:
CXI unter OS/2


  CXI-Basis-Programmierreferenz
Version 2.10 72 (1014-001), erstellt am 15. April 2000
Textseite 32 von 855, Thema 8256 (SystemOS2m)


  Struktur Themen A...Z Titel << >>
  Copyright © 2005 by TeraConnect Informationstechnologie GmbH Sprung zum Seitenanfang