Newsgroup: it.comp.lang.c++
Titolo: Aiuto su allocazione memoria in C++

Sto generando un codice che legge un file testo da disco e lo memorizza
linea per linea nella memoria.
Perfare questo utilizzo i puntatori perche' memorizzo linea per linea in una
lista, utilizzando la malloc, con dei puntatori normali.
Tutto va bene finche' i file sono piccoli, ma i problemi sorgono quando
leggo file un attimino piu' grossi, perche' finisce la memoria.
Chi mi puo' dire come si fa ad allocare memoria oltre la pagina riservata al
processo che in funzione:
I miei puntatori sono definiti normalmente come ad es:
char *a;
mi pare che si debba usare la parola far, pero' non ho mai lavorato con
queste cose.
Sapete aiutarmi?

 Sapete aiutarmi?
se parli di 'far' non ci sono buone notizie ...
probabilmente usi il TurboC o una altro compilatore sotto DOS, dove la
memoria e` scarsa. purtroppo visto che usi le liste la 'far' non aiuta
(serve per avere un UNICO blocco di memoria > 64K). i piu` comuni ripieghi
sono: usare XMS, EMS. entrambi i metodi sono da evitare come la peste,
costringono a cose inumane ...
cerca il DJGPP (info nella mia home page) e` gratis, e fa quello che cerchi
senza far o ripieghi simili.
---
Ranger, email 
ran...@queen.it
http://members.tripod.com/%7Eranger_rg/

senza far o ripieghi simili.
Gia', il problema e' che USO Djgpp. E che lo uso pure sotto win95.
Questo e' l'errore che compare ad un certo punto, mentre legge il file e ne
memorizza una linea alla volta nella memoria:
Exiting due to signal SIGSEGV
General Protection Fault at eip=00002274
eax=0000001c ebx=00000002 ecx=fffffffc edx=33314c54 esi=00000016
edi=0000cec0
ebp=0004cd68 esp=0004cd60 program=C:\DJGPP\TMP\UTILCIRC.EXE
cs: sel=00a7  base=82eae000  limit=0005ffff
ds: sel=00af  base=82eae000  limit=0005ffff
es: sel=00af  base=82eae000  limit=0005ffff
fs: sel=0087  base=00023fc0  limit=0000ffff
gs: sel=00c7  base=00000000  limit=ffffffff
ss: sel=00af  base=82eae000  limit=0005ffff
Call frame traceback EIPs:
  0x00002274
  0x000016b3
  0x000015b5
  0x00001dba
C:\Djgpp\TMP>
Per creare l'eseguibile, ho compilato il file .c da rhide, poi ho fatto make
<file> dal prompt di rhide.
Purtroppo il make da rhide o il link, o il run o il run step by step non
riesco a farlo da rhide per qualche motivo che non ho ancora capito, i file
.zip credo di averli tutti.
Sara' dovuto a qualche parametro da aggiugere quando faccio il make?
C'e' un modo per far allocare altra memoria?
Questi sono i file che ho scaricato ed il nome del server ftp da cui li ho
scaricati. (E' un mirror che ho trovato tramite delorie.
FTP Site: 
ftp://sunsite.cnlab-switch.ch/mirror/simtelnet/gnu/djgpp/
Note: To view online documentation and help, run the "info" program.
Note: RHIDE has an online help viewer also.
Note: Use gxx (or append -lstdc to your gcc command line) to compile and
link C++ programs (*.cc)
v2/
copying.dj
        DJGPP Copyright info            2 kb
v2/djdev201.zip      DJGPP Basic Development Kit   1.5 mb
v2/faq210b.zip       Frequently Asked Questions    390 kb
v2/readme.1st        Installation instructions      14 kb
v2apps/rhide14b.zip  RHIDE                         1.6 mb
v2gnu/bnu281b.zip    Basic assember, linker        1.8 mb
v2gnu/gcc2721b.zip   Basic GCC compiler            1.0 mb
v2gnu/gpp2721b.zip   C++ compiler                  666 kb
v2gnu/lgp271b.zip    C++ libraries                 624 kb
v2gnu/mak3761b.zip   Make (processes makefiles)    229 kb
v2gnu/txi390b.zip    Info file viewer              456 kb
v2tk/bccgrx20.zip    BCC to GRX converter          340 kb
v2tk/grx22.zip       GRX Graphics                  741 kb
v2tk/rsxdj131.zip    RSX (Windows GUI Lib)         2.1 mb
Total bytes to download: 12,043,275
Installation Instructions
Follow this example, substituting paths as appropriate (type the bold
parts):
C:\> mkdir djgpp
C:\> cd djgpp
C:\DJGPP> pkunzip -d d:\tmp\djdev201.zip
C:\DJGPP> pkunzip -d d:\tmp\faq210b.zip
C:\DJGPP> pkunzip -d d:\tmp\rhide14b.zip
C:\DJGPP> pkunzip -d d:\tmp\bnu281b.zip
C:\DJGPP> pkunzip -d d:\tmp\gcc2721b.zip
C:\DJGPP> pkunzip -d d:\tmp\gpp2721b.zip
C:\DJGPP> pkunzip -d d:\tmp\lgp271b.zip
C:\DJGPP> pkunzip -d d:\tmp\mak3761b.zip
C:\DJGPP> pkunzip -d d:\tmp\txi390b.zip
C:\DJGPP> pkunzip -d d:\tmp\bccgrx20.zip
C:\DJGPP> pkunzip -d d:\tmp\grx22.zip
C:\DJGPP> pkunzip -d d:\tmp\rsxdj131.zip
C:\DJGPP> echo set PATH=C:\DJGPP\BIN;%PATH% >> c:\autoexec.bat
C:\DJGPP> echo set DJGPP=C:\DJGPP\DJGPP.ENV >> c:\autoexec.bat
Ctrl-Alt-Del to reboot
If your computer starts Windows automatically when it boots, edit
c:\autoexec.bat and move the two new lines before the line that runs
Windows, else they won't take effect
You may use unzip instead of pkunzip -d if you prefer.
Ti sembra che manchi qualcosa?
Potresti postarmi il dir della tua cartella djgpp\bin per vedere se ho
qualche file in meno che mi occorre?
Ciao e grazie ;)

memorizza una linea alla volta nella memoria:
Hai provato a modificare nelle proprietą della finestra dos dove gira il tuo
programma il valore di "memoria in modalitą protetta DPMI"?
-- 
email: 
en...@bitsmart.com

 qualche file in meno che mi occorre?
se vuoi te la posso mandare, ma ho installato molti + programmi, percio`
non potresti fare un confronto diretto (ho 135 file, di cui 123 .exe)


programma il valore di "memoria in modalitą protetta DPMI"?
Ora l'ho fatto.
C'era scritto automatica ed ho messo 16384.
Idem con patate. Il msg d'errore e:
Exiting due to signal SIGSEGV
General Protection Fault at eip=00002274
eax=0000001c ebx=00000002 ecx=fffffffc edx=33314c54 esi=00000016
edi=0000cec0
ebp=0004cd68 esp=0004cd60 program=C:\DJGPP\TMP\UTILCIRC.EXE
cs: sel=01c7  base=8363b000  limit=0005ffff
ds: sel=01ef  base=8363b000  limit=0005ffff
es: sel=01ef  base=8363b000  limit=0005ffff
fs: sel=01a7  base=0001d7c0  limit=0000ffff
gs: sel=01ff  base=00000000  limit=ffffffff
ss: sel=01ef  base=8363b000  limit=0005ffff
Call frame traceback EIPs:
  0x00002274
  0x000016b3
  0x000015b5
  0x00001dba
C:\Djgpp\TMP>
Strano, se lo stesso programma lo compilo con turbo C va tutto bene.
Mah!
Cmq grazie, ci abbiamo provato.
Altre idee?