Dopo aver fornito lo stesso programma che legge un file di input generato casualmente ed echeggia la stessa stringa che legge su un'uscita. L'unica differenza è che da un lato sto fornendo i metodi di lettura e scrittura da Linux syscalls, e dall'altro lato sto usando fread/fwrite.Perché la funzione fwrite libc è più veloce della funzione di scrittura syscall?
Temporizzando la mia applicazione con un input di 10 Mb di dimensione e facendo eco a/dev/null e assicurandomi che il file non sia memorizzato nella cache, ho trovato che fwrite di libc è più veloce di una scala LARGE quando si usano buffer molto piccoli (1 byte nel caso).
Qui è la mia uscita da tempo, utilizzando fwrite:
real 0m0.948s
user 0m0.780s
sys 0m0.012s
E utilizzando la syscall scrittura:
real 0m8.607s
user 0m0.972s
sys 0m7.624s
L'unica possibilità che mi viene in mente è che internamente libc è già il buffering mia input ... Purtroppo non ho trovato molte informazioni sul web, quindi forse i guru qui potrebbero aiutarmi.
"internamente libc sta già caricando il buffer del mio input". Questo è esattamente ciò che sta facendo. Probabilmente puoi anche leggere il codice sorgente di libc se vuoi, e vedere esattamente come lo sta facendo. – kquinn