Article View: de.comp.lang.c++
Article #1474Re: Speicherprobleme mit Borland C
From: ana163 AnalysisI
Date: Wed, 31 Jan 1996 12:50
Date: Wed, 31 Jan 1996 12:50
36 lines
2633 bytes
2633 bytes
Hallo ILT-Benutzer, (???) Dein Problem ist nicht der 386-Code. Das bedeutet nur, dass dein Prozessor mit 32 Bit langen Registern und ein paar erweiterten Befehlen umgehen kann. Unter normalem DOS laeuft dein Programm im Real-Mode (bzw. Virtual-Mode) des Prozessors. Das bedeutet, dass Du ein segmentiertes Speichermodell hast, wobei Du nur jeweils auf ein Segment mit 64 KBytes Zugriff hast. Zusammen mit der 20 Bit breiten Adressierung beschraenkt das Deinen Adressraum auf 1 MB (8086 laesst gruessen). Jedoch kann dein Prozessor im Protected Mode die Segmentgroessen auf 4 Gbyte (ab i386) ausdehnen. Das bedeutet fuer Dich, dass du die Segmentregister vergessen kannst und damit ein lineares 32-Bit Speichermodell hast (wie bei vernuenftigen Prozessoren). Leider mag das DOS den Protected-Mode gar nicht. Es gibt jedoch zwei Loesungen: Ab dem i386 gibt es einen Fehler (zum Glueck!) im Prozessor. Du kannst kurz in den Protected-Mode schalten, ein oder zwei selten gebrauchte Segmentregister auf 4 GByte aufblasen und wieder in den Real-Mode zurueckschalten. Durch den Fehler werden die Segmentregister-Caches nicht wieder neu initialisiert und deine Segment sind auch im Real-Mode 4 GBytes gross. Leider geht dieser Trick nicht, wenn Du einen Speichermanager wie z.B. EMM386 benutzt, da dieser den Prozessor im Virtuellen 8086 Modus lauffen laesst. Aber es gibt eine andere Moeglichkeit. Benutze einen C++ Compiler, der DOS-Extender unterstutzt (z.b. GNU C++ oder Watcom C++). Dort kannst Du einfach drauflosprogrammieren und musst Dich nicht mit solchen Sachen wie Segmentgerenzen und anderen DOS-Anachronismen herumschlagen. Integer und Zeiger werden 32 Bit breit. Der gesammte Speicherbereich von 32 MBytes steht Dir offen. Du kannst damit auch DOS Funktionen aufrufen und der Extender regelt den ganzen Kleinkram fuer Dich. Also kauf Dir einen vernuenftigen C++ Compiler und wechsel am besten auf ein richtiges Betriebssystem wie z.B. OS/2. In diesem Sinne... Joern Ihlenburg
Technical Details
Message-ID:
<4enoia$pnq@newsserv.zdv.uni-tuebingen.de>Path:
arc1-ca.pugleaf.net!newsserv.zdv.uni-tuebingen.de!newsReferences:
<4elko4$e65@news.rwth-aachen.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!newsserv.zdv.uni-tuebingen.de!news From: ana163 Analysis~I <ana163> Newsgroups: de.comp.lang.c++ Subject: Re: Speicherprobleme mit Borland C Date: 31 Jan 1996 12:50:18 GMT Organization: InterNetNews at ZDV Uni-Tuebingen Message-ID: <4enoia$pnq@newsserv.zdv.uni-tuebingen.de> References: <4elko4$e65@news.rwth-aachen.de> NNTP-Posting-Host: donau.mathematik.uni-tuebingen.de Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 1.1N (X11; I; HP-UX A.09.05 9000/712) To: user@ilt.fhg.de X-URL: news:4elko4$e65@news.rwth-aachen.de