mehr als 64k Speicher allocieren
-
Ich habe es gerade mit gcc unter Linux probiert - da kann ich beliebig viel Speicher allocieren...
Doch leider soll unser Projekt (Technikerschule) unter DOS laufen.
Heißt das jetzt, daß ich wirklich keine Chance habe?
Gruß
Poolplayer
P.s.: Da ich hier neu bin - wo hätte ich diese Frage denn posten sollen?
-
Gab's bei Turbo C nicht verschiedene Speichermodelle? Je nachdem, welches Modell ausgewählt wurde, hatte man mehr oder weniger Speicher zur Verfügung... (zumindest ist das bei Turbo C++ 3.x so gewesen).
Vielleicht lässt sich Dein Problem aber auch mit weniger als 64KB Speicher lösen ...
Original erstellt von poolplayer:
.... ich hier neu bin - wo hätte ich diese Frage denn posten sollen?Im Forum für Andere Compiler;
-
Ich habe bereits "huge" als Speichermodell eingestellt...???
Version ist 3.1
Was gibt es denn sonst noch für DOS-Compiler?Gruß
Poolplayer
-
Auch hier möchte ich die Lösung des Problem schreiben - vielleicht interessiert es ja einen Leidensgenossen
Borland TurboC V3.1:
Unter Options-Debugger kann man die Heap-size einstellen.
Standardmäßig steht diese auf 64k leider kann man Sie nur auf maximal 640k erhöhen - was für mich allerdings ausreichtUnd wer unter Borland TurboC die Funktion malloc() verwendet MUß unbedingt stdlib.h bzw. alloc.h einbinden - sonst gehts net!
Und gemeiner weise kann man trotzdem Fehlerfrei compilieren - na wenn des kein BUG ist...!!!Gruß
Poolplayer
-
**Borland TurboC V3.1:
Unter Options-Debugger kann man die Heap-size einstellen.
Standardmäßig steht diese auf 64k leider kann man Sie nur auf maximal 640k erhöhen - was für mich allerdings ausreicht
**Für mehr als 640K musst du unter reinem MS-DOS dich dann mit XMS oder EMS herumschlagen.
**Und wer unter Borland TurboC die Funktion malloc() verwendet MUß unbedingt stdlib.h bzw. alloc.h einbinden - sonst gehts net!
Und gemeiner weise kann man trotzdem Fehlerfrei compilieren - na wenn des kein BUG ist...!!!
**Den Header stdlib.h musst du eigentlich immer inkludieren wenn du malloc() verwendest. Dummerweise kann man bei manchen Compilern malloc() auch ohne inkludierten stdlib.h Header verwenden. Dann allerdings erhält man eine Warning, über eine implizite Zeigerkonvertierung von void* nach was auch immer.
Deshalb statt
int* pi; pi = (int*)malloc(200, sizeof(int)); ... free(pi);
besser so:
#include<stdlib.h> int* pi; pi = malloc(200, sizeof(int)); ... free(pi);
-
Nimm DJGPP, der kann sicher mehr als 64k (glaub bis 8MB oder mehr).
Hier die URL: http://www.delorie.com/djgpp/
-
Hi,
ich habe den djgpp (nach langem suchen...) gefunden - wir haben den irgendwann mal von unserem Lehrer auf CD bekommen.Leider ist da keine soooo tolle Programmierumgebung dabei - oder gibt es da etwas besseres als dieses RHIDE (da funktioniert nicht mal die Maus unter Windooofs)???
Wenn es da was gäbe, würde ich sofort umsteigen...Gruß
Poolplayer
-
Turbo C++ 1.0 (von Borland frei runterladbarer DOS-Compiler) bietet die Funktion 'farmalloc', mit der dein Problem gelöst sein sollte. Die Funktion ist dort auch genauer beschrieben.
Allerdings ist dein Programm dann nicht mehr Ansi-C-kompatibel; 'farmalloc' ist Turbo-C-spezifisch.
-
Man könnte auch auf Betriebssystemaufrufe ausweichen, und direkt vom DOS einen Speicherblock anfordern. Ich glaub die Funktion heißt allocmem und ist in dos.h, bin mir aber nicht sicher. Ausserdem gibt sie keinen Pointer zurück, sondern eine Segmentadresse, aber das sollte in der Hilfe erklärt sein.
-
-
"Do not use allocmem and malloc functions in the same program. "
Der Satz ist Schwachsinn. Du solltest nur nicht versuchen, den allocmem-Block per free loszuwerden ...