|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2005
Città: Cesena
Messaggi: 323
|
[C] Lettura caratteri da file
Qual è, in assoluto, la funzione più veloce per leggere carattere per carattere da un file tra tutte quelle messe a disposizione dal C? Lo chiedo perché sto tentando di implementare l'algoritmo della codifica di Huffman, e quando vado a leggere file con una quantità elevata di caratteri, anche la lettura di un carattere deve risultare il più veloce possibile, o sbaglio?
Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
ehmm...
non ti conviene leggere carattere per carattere ad occhio ma ti conviene leggere blocchi di byte se vuoi la massima velocità. Se i file da codificare non sono troppo grandi mi sa ke ti conviene pure leggere prima tutto il file in una volta e lavorarci direttamente in menoria. Altrimenti puoi procedere codificando per blocchi successivi (abbastanza grandi).
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
|
Se non ricordo male, il modo più veloce per leggere una serie di caratteri da uno stream è usare la system call read impostando un buffer di 8192 byte.
Parlo di sistemi unix. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() Cmq nulla toglie di poter usare un multiplo di questa dimensione... sempre se il mio ragionamento è giusto ![]() conferme o smentite? ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
|
Ero convinto anche io di questo fatto, ma queste informazioni le presi su un libro di programmazione su sistemi unix, in cui si spiega molto bene come dimensioni superiori a quella da ma indicata, sono semplicemente sprecate.
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2005
Città: Cesena
Messaggi: 323
|
Ok, ed in conclusione quale delle tante funzioni messe a disposizione dovrei usare?
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
io non saprei ma dalle risposte degli altri direi fwrite
|
![]() |
![]() |
![]() |
#8 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() in effetti non mi pare una cattiva idea quella del file mapping... questa codifica di huffman (scusate la mia sonora ignoranza) che d'era? un algoritmo di compressione? |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2005
Città: Cesena
Messaggi: 323
|
Si, è un algoritmo usato per la compressione. Potreste fare anche qualche esempio pratico di codice in C? Perchè purtroppo non riesco a seguire molto questi vostre "indicazioni teoriche" e non saprei come trasformarle poi in codice.
Grazie |
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
purtroppo il modo di gestire file mappati in memoria (anche detti file mapping) è dipendente dalla piattaforma: su Windows è in un modo e su Linux in un altro. se però sei disposto a legarti ad una piattaforma allora credo che sia l'ipotesi migliore, anche perché spesso la dimensione di una pagina è un multiplo della dimensione di un cluster. in tal caso la domanda diventa: il programma deve girare su Windows, Linux o altro?
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2005
Città: Cesena
Messaggi: 323
|
Teoriacamente su windows, pero deve funzionare sulla shell cygwin, con compilatore GNU.
|
![]() |
![]() |
![]() |
#12 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
non ho mai usato cygwin quindi a scanso di dire corbellerie ti espongo entrambi i casi:
* su Windows devi usare CreateFileMapping e MapViewOfFile * su Linux mmap |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:42.