PDA

View Full Version : [C] domanda banale su dim max array


tecno789
13-01-2012, 21:45
In pratica ho la necessità di scandire un file grossissimo testuale e mi serve un array grande per contenere tutti quei caratteri, ma pensandoci bene non mi sono mai posto il problema..qual'è la max dimensione che si può ottenere con un array??

__ZERO_UNO__
13-01-2012, 23:19
E' uguale alla dimensione della memoria heap concessa al processo del tuo programma da parte del so e dall'hw.

demos88
13-01-2012, 23:21
Ma che ci devi fare con il file? Se possibile, lo tratterei come stream mediante l'uso delle funzioni apposite: fgets, fread... e ci lavori riga per riga (se è un file di testo).
Se proprio vuoi copiarlo per intero in memoria, direi che piuttosto che un array, ti conviene allocare dinamicamente della memoria con malloc.

clockover
14-01-2012, 00:57
Se hai da lavorare con un file molto grande io farei così:
1) ti allochi con un buffer N bytes
2) ti copi N bytes del file nel buffer
3) fai quello che ci devi fare con i tuoi dati
4) parti di nuovo dal punto 2 se non hai finito

se vuoi fare il figo e velocizzare ancora la cosa puoi allocarti 2 buffer, così che mentre con un thread operi sul bufferA, con un altro thread leggi da disco e scrivi sul bufferB, e così via scambiandoli
L'importante è avere un buffer più grande possibile e se hai bisogno di memoria heap di non effettuare inutilmente malloc/free dato che sugano un sacco di tempo

tecno789
14-01-2012, 08:49
scusate l'ignoranza ma possibile che lo stack non abbia 208 kb da caricare in memoria??? ma con malloc non posso dire: allocami 300 kb ecc....

demos88
14-01-2012, 08:59
scusate l'ignoranza ma possibile che lo stack non abbia 208 kb da caricare in memoria??? ma con malloc non posso dire: allocami 300 kb ecc....
malloc se non erro alloca nell'heap, che ha minori restrizioni di spazio rispetto allo stack.
Sta di fatto che a meno di necessità particolari, dovresti usare il file come uno stream e trattarlo a blocchi di dimensione contenuta.

tecno789
14-01-2012, 09:32
malloc se non erro alloca nell'heap, che ha minori restrizioni di spazio rispetto allo stack.
Sta di fatto che a meno di necessità particolari, dovresti usare il file come uno stream e trattarlo a blocchi di dimensione contenuta.

quindi non si può leggere manco un file intero?? :(

GByTe87
14-01-2012, 20:52
Per allocare variabili di grosse dimensioni devi fare i conti con i limiti imposti dal sistema operativo; vedi ulimit su linux.

Se hai a che fare con file di grosse dimensioni, potrebbe essere utile mapparli in memoria; dai un occhio a mmap();