Newsgroup: it.comp.lang.pascal
Titolo: Problemi di memoria

Ciao a tutti, vorrei presentarvi un mio piccolo problema e sinceramente
sarei molto grato a chi mi aiutasse o anche a chi perdesse solo due minuti
per leggere.
Ho appena terminato un programma che riesce a fondere due programmi in un
solo file. All'esecuzione di questo, uno dei due file compie alcune
istruzioni mentre l'altro viene eseguito (avete presente il SilkRope?). Bene
voi a questo punto direte:"funziona?", ed io a questo punto rispondo:"E'
proprio qui il problema!". Dato che il codice del programma è abbastanza
lungo, ho inizialmente scritto più "programmini" ognuno dei quali faceva una
parte del lavoro. In questo modo, soprattutto in fase di progettazione,
potevo più facilmente controllare le operazioni e di conseguenza limitare
gli errori. Una volta terminate le varie parti del programma ho riunito il
tutto in un solo file.
Il codice del programma, dato che contiene anche le istruzioni per ricreare
sotto forma binaria i due programmi (ora uniti in un file), occupa circa 270
Kb. E' proprio qui che iniziano i miei problemi dato che come saprete la
lunghezza massima di un file (.pas) da compilare non può essere maggiore
ai 65520 Byte (altrimenti si incorre in ERROR 48 "Code Segment Too Large") .
Bene, a questo punto allora ho diviso il codice in un file pricipale
(PROG.PAS <20 Kb>) e in cinque unit (A1.TPU;A2.TPU;A3.TPU;A4.TPU;A5.TPU
<tutte di 50 Kb>).
In più ogni unit l'ho per forza dovuta dividere in più procedure di
dimensione inferiore ai 24 Kb (altrimenti si incorreva in ERROR 124
"Statement Part Too Large").
A questo punto le sofferenze sembrerebbero essere finite ma quando da
PROG.PAS vado a compilare il tutto...ERROR 1 "Out of Memory".
Ebbene sì il programma è troppo grande per essere contenuto in memoria.
L'unico modo per far partire il programma è caricare dal file PROG.PAS
solamente una delle cinque unit (un po' pochino!!). La guida in linea mi
consiglia alcune cose come non caricare driver inutili nel config.sys,
eliminare vari tsr, provare ad riservare i buffer sul disco e non sulla
memoria, deselezionare vari controlli dal menu opzioni...tutto inutile!
Adesso non so proprio cosa fare. Io di pascal ne capisco poco e se l'ho
usato per scrivere questo programma è solo perchè mi serviva urgentemente
fondere due file (e non con programmini in circolazione "prefabbricati" ,
questa è un'altra storia...) e perchè mi sembrava un linguaggio abbastanza
adatto per il mio scopo (e così si è rivelato...a parte questo problema!).
Sicuramente voi ne saprete più di me riguardo questo linguaggio e quindi
sarei molto grado a chi volesse aiutarmi.
Grazie a tutti.

passa a delphi.
--
Gna...@Wappi.com
ICQ# 76488613
http://gnaffy.tripod.com/

Perche` non provi a compilare lanciando il compilatore dalla riga di
comando? Mi sembra che si chiami tpc. Io una volta ho avuto un problema
analogo e cosi` mi pare che abbia funzionato.
Ciao
  Roberto.
-- 
"Ci sono persone che guardano il mondo e si chiedono perche`. Ce ne sono
altre che guardano il mondo sognando come dovrebbe essere e si chiedono
perche` no."
(R. Kennedy)
ICQ#: 18469567

 analogo e cosi` mi pare che abbia funzionato.
Già ci ho provato ma purtroppo mi ha dato lo stesso risultato.
Grazie lo stesso.Ciao Cristiano.

Usa tpcx.


 PROG.PAS vado a compilare il tutto...ERROR 1 "Out of Memory".
Prova a compilare con FreePascal (
www.freepascal.org
) è molto più
evoluto di TP7 (è 7 anni + giovane) penso sfrutti tutta la mem non solo
i 512kb di Low.

sarņ monotono, ma passa a delphi :-)


 Usa tpcx.
Ho usato tpx e sembra che si sia deciso a compilare (grazie Lawrence!). Però
adesso è sorto un altro piccolo problema:
se io apro un file con "rewrite" in PROG.PAS e poi provo a scriverci dentro
con una procedura (chiamata da PROG.PAS) che si trova in A1.TPU mi dice che
il file non è stato aperto. Potrei pensare di aprirlo e chiuderlo nella unit
(ci ho provato e logicamente funziona), ma il problema è che in quel file ci
devo scrivere anche mediante procedure chiamate in A2.TPU e in A3.TPU.
Potrebbe essere una soluzione aprirlo e chiuderlo in ogni unit e usare
"append" per continuare a scriverci dentro ma questo non è possibile dato
che il file in cui scrivo è assegnato ad una variabile "file of char" che
non supporta il comando "append". Il tipo di variabile deve essere
assolutamente quella. Come si può fare?
Grazie a tutti già da adesso.
(P.S. mi sembrava giusto cambiare l'intestazione dell'oggetto dato che la
discussione ha cambiato rotta)