Newsgroup: it.comp.lang.c++
Titolo: sulla dimensione fisica degli int

eccomi qua... dunque... mettiamo che io debba fare un programma e
desideri che questo programma sia utilizzabile su varie piattaforme e
anche per un lungo periodo...
questo programma utilizza una base dati costituita di varie cose, tra
cui una lunga lista di interi...
è possibile utilizzare questo stesso file per le varie piattaforme?
oppure bisogna sempre e comunque convertirlo?
inoltre, avendo a che fare con degli int, la dimensione dei quali non
è fissata, ma potrebbe valere 8bit per qualche piattaforma, 32 o 64
per altre, mi conviene usare __int32 (o come si chiama nello standard)
oppure il problema di tutto ciò non si pone e mi conviene
semplicemente scrivere delle funzioni di conversione (da win a linux,
da 32bit a 64bit, ecc.)???
-- 
]\/[ad]\/[age (
www.madmagelab.cjb.net
)
"Un Maestro insegue semplicemente la sua visione di Eccellenza in
qualunque cosa sta facendo e lascia agli altri decidere se sta 
lavorando o giocando. A lui sembra sempre di fare entrambe." - Anonimo

 anche per un lungo periodo...
Per problemi di portabilità, non conviene scrivere i numeri in formato 
binario. Oltre alla dimensione, i sistemi non sono d'accordo sull'ordine 
con cui questi byte vengono scritti (big-endian, little-endian...).
Scrivi il numero in formato testo (decidendo un numero max di cifre 
significative se vuoi una larghezza fissa). Quando lo rileggi, parsi la 
stringa con funzioni standard e stop. Praticamente te ne puoi fregare della 
dimensione di int, semplicemente passando da strtol e controllando che il 
risultato non sia maggiore di MAX_INT.


Ma le prestazioni di questo sistema sono decisamente scarse, non vorrei 
esagerare, ma circa un fattore 10 peggio rispetto ad un sistema "binario".
Forse conviene scegliere un intero a 64 bit e la sua endianess, e fare 
le funzioni di conversione, che sono comunque più veloci della 
conversione a e da decimale.
Tutto dipende dalla quantità di dati da trattare e dalla velocità richiesta.

 richiesta. 
Bah, sulle prestazioni c'è sempre molto da discutere. Può darsi che sia 
dieci volte più lento, che però immerso in un evento come la lettura da 
disco notoriamente molto lento, probabilmente non sarebbe apprezzabile. 
Mentre la conversione binaria presuppone che tu conosca l'endianess in fase 
di compilazione, informazione che non hai, per cui le compilazioni vanno 
esplicitamente gestite per ciascuna piattaforma. Soluzione decisamente meno 
"pulita", direi.

 Ma le prestazioni di questo sistema sono decisamente scarse
Nella ns. ditta tutto il software si sta muovendo da una memorizzazione 
dei dati in binario ad una in XML (e quindi ASCII alla fine). Le 
prestazioni, ad oggi, sono spesso secondarie, visti i processori in giro.
Invece avere file facilmente condivisibili (ed eventualmente modificabili 
on-the-fly) è molto più comodo e "portabile".
-- 
Luc.

 "binario". 
prima di parlare di prestazioni scarse bisogna fare due cose:
1) *accorgersi* che il programma e` troppo lento: se il programma e` gia` 
veloce quanto basta e` inutile scervellarsi a renderlo inutilmente piu` 
veloce
2) *misuare* con l'aiuto di un profiler quali sono i "colli di 
bottiglia": altrimenti corri il rischio di impazziare ad ottimizzare 
parti di programma che vengono eseguite molto raramente e che portano ad 
uno scarso guadagno complessivo
Detto questo, penso proprio che la differenza di prestazioni tra letture 
di un file in binario e un file in formato testo sia decisamente 
piccola: la maggior parte del tempo speso per leggere un file e` 
consumato dal recupero fisico dei byte dall'hard disk: in confronto il 
tempo impiegato per il parsing dei numeri e` talmente piccolo da 
incidere molto poco sul tempo totale.
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra