Mal wieder TP-Problem (Speicher)

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Brueggi

Mal wieder TP-Problem (Speicher)

Beitrag von Brueggi »

Huhu, Freaks! :-)

Ich arbeite momentan an einem umfangreicheren Projekt. Hierzu benötige ich relativ viel Speicher (wobei das meiste davon dann quasi im XMS liegt).

Zu der Umgebung, in der das Programm läuft:
- 640K konventioneller RAM
- davon 311 K frei
- freier Speicher ist am Stück und liegt immer an den selben Adressen

Das Problem ist, Pascal wirft mir unverständlicherweise irgendwie weniger Speicher aus, als ich haben müsste:

TPC an der Kommandozeile sagt:
1289 Lines, 26144 Code, 48458 data

Compiliere ich unter der IDE kommt unter dem Menüpunkt "Information":
Code: 57264
Data: 48524
Stack: 4096

Die Exe-Größe deckt sich mit dem, was TPC sagt.

Halten wir also fest:
311K frei
abzüglich Stack 4K
abzüglich Data 48K
abzüglich Code 26K
abzüglich Speicher über GETMEM ins. 133K

Rest: 100K

Allerdings sagt Pascal zu mir, es wären nur 2K Restspeicher - ich musste Code-Teile schon entfernen, damit GETMEM keinen Runtime-Error auslöst. Hab ich was übersehen oder verbraucht Pascal irgendwo für irgendwas nochmal zusätzlich Speicher?

(Das Abschalten von Overflow/Stack-/Range-Check bringt nochmals ca. 5K)

Ansonsten sind meine Compiler-Optionen: Emulate 8087, 286-Befehle an und Word-Align an.

Könnte es am Word-Align liegen? (Daten sind eigentlich nur eine Handvoll Word-/Byte-Vars, 4 Strings und ein großes Word-Array).
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: Mal wieder TP-Problem (Speicher)

Beitrag von wobo »

Da ich nicht mit dem Commandline-Compiler arbeite, kann ich dazu nichts sagen. Aber bist Du Dir sicher, dass die Compiler-Befehle bei beiden Kompiliervorgängen identisch sind?

Am Word-Align liegt es m.M.n. nicht.

Mir ist aber auch schon aufgefallen, dass ich, wenn ich ein GOS-Programm schreibe, immer ca. 100kb weniger Speicher habe, als ich mir ausgerechnet hatte. Das ist aber bei jedem GOS-Programm so, das ich mit TP schreibe. Ich habe immer vermutet, dass Du in der Gos286.TPU eben ca. 100kb Speicher am Heap allokierst. Das ist ja aus der Exe und aus den Werten bzgl Stack, Data Segm., Code Size nicht ersichtlich.

Langen Dir echt nur 4 kb Stack unter TP? Ich habe standardmäßig den Stack bei all´ meinen Programmen auf 32kb erhöht, weil ich bei 16kb sehr oft Überlauffehler habe..
Brueggi

Re: Mal wieder TP-Problem (Speicher)

Beitrag von Brueggi »

Hi,

also die GOS-TPU, sowie auch die BDOS-TPUs alloziieren keinen weiteren Speicher. Daran kann es also nicht liegen. Aber vielleicht habe ich ja im Exe-Relokator einen Denkfehler? Ich ermittle ja die freien Paragraphen wie folgt:

Die Exe liegt (inkl. PSP) ab $0900:$0000 im RAM und darf bis $5FFF:$000F mit dem Speicher machen, was sie will. Die Freien Paragraphen erechnen sich also mit

FREI=$5FFF-$0900 und werden so in den PSP eingetragen. Es würde mich schon mal interessieren - weil es offenbar dich auch betrifft - wo da die 100K hingekommen sind. Pascal legt doch keine "reserve" an oder? Hast Du dieses Verhalten auch mit der BDOS286-TPU ? Ansonsten müsste man mal schauen, was los ist.

P.S.: Interessant - 100K sind $0064. Nicht das ich jetzt irgendwo Murks im Exe-Lader gebaut habe und der noch was abzieht.... das sieht mir verdammt nach den 64K ($64 - Schreibfehler im Code?) Reserve für
AllocMem aus - die ich aber eigentlich seit geraumer Zeit wieder entfernt habe und die unter GOS niemals
angelegt wurde (wozu auch). Ich werde das mal checken.
Brueggi

Re: Mal wieder TP-Problem (Speicher)

Beitrag von Brueggi »

...da gehts ja schon wieder los... meine doku zum PSP sagt: Offset 2: Freier Speicher in Paragraphen, Wikipedia sagt: Letztes vom Programm belegtes Segment... Ja wie denn nun? Wikipedia Englisch sagt aber auch: Memory Size in Paragraphs.... Schön, dass sich nichtmal Wiki einig ist *hehehe*

Edit: Und weils so schön ist: Eine weitere Doku sagt, in Offset 2 steht einfach nur das letzte Segment des verfügbaren RAMs... WAS stimmt denn nun?
Brueggi

Re: Mal wieder TP-Problem (Speicher)

Beitrag von Brueggi »

Also ich bin ja fast dafür, dass wir hier im Forum einen eigenen Bereich für unsere eigenen Dokus gründen - es nervt einfach tierisch, wenn man im Internet was wissen möchte und jedesmal auf 5 verschiedene Tatsachen trifft... Ich habe nochmals hier geschaut:

http://cs.smith.edu/~thiebaut/ArtOfAsse ... H13-8.html

da steht auch, im PSP wird die letzte verfügbare Adresse (sollte in meinem Fall also $5FFF sein) vermerkt. Ich gehe mal davon aus, dass das jetzt auch stimmt. Dann kann ich meine Doku (bin mir grad nicht sicher, obs PC Intern oder das DOS Programmierhandbuch war) ja wirklich in die tonne kloppen...
Antworten