[Tech] OT: C, linux e la rappresentazione in mem
Carlo Baffa
baffa@arcetri.astro.it
Lun 1 Mar 2004 16:49:41 CET
On Mon, 1 Mar 2004, Valerio Montagnani wrote:
> 16 bit
> 2 canali
> 8000 Hz di freq. di campionamento.
> durata acquisizione 60 sec.
>
> la quantità di memoria da allocare è: 60*16*2*8000=15360000 bit.
>
> Voglio che il buffer che dovrà contenere i dati audio, sia un buffer in
> allocazione dinamica di tipo float, per cui:
Perche' float? e' molto piu' efficiente lo int!
> p=(float *)calloc(size,sizeof(float));
> in linux sizeof(float)=4 (32 bit), quindi per esprimere in bytes la quantità
> di memoria sopra calcolata e tenendo conto del numero di bit necessari per
> la rappresentazione di un numero di tipo float, si ha:
> 60*16*2*8000/32 = 480 Kb.
> Qui viene il mio dubbio. La scheda audio quantizza il suono con 16 bit (come
> richiesto). Un tipo float usa 32 bit per la rappresentazione di un numero.
> Quindi nel mio buffer avrò i 16 bit più rappresentativi tutti con il valore
> 0, mentre i meno significativi saranno effettivamente impiegati per la
No questo sarebbe giusto se tu usassi degli int (32bit). I float usano 24 bit
per rappesentare la mnatissa e 8 (credo) per l'esponente.
Se tu invece usassi degli short unsigned (16 bit) avresti un'occupazione
pari alla meta' e riempiresti tutti i bit.
Non ho sottomano dei benchmark aggiornati sugli short unsigned, ma una volta
(nel neolitico superiore) la loro aritmetica era piu' lenta, e conveniva
convertirli ad int (32bit) per farci sopra i conti. Oggigiorno non lo so.
Ciao
Carlo
----
Carlo Baffa INAF - Osservatorio Astrofisico di Arcetri
baffa@arcetri.astro.it Largo Fermi 5
http://www.arcetri.astro.it/~baffa/ I-50125-Firenze ITALY
-------------------------------------------------------------------------
http://www.skysoft.org The new Astronomical Software Directory
Maggiori informazioni sulla lista
flug-tech