Ho un buffer generico generato per accumulare pezzi di stringa "casuali" e quindi recuperare il risultato. Code per gestire tale buffer è scritto in pianura C.Strategia di crescita del buffer
Pseudocodice API:
void write(buffer_t * buf, const unsigned char * bytes, size_t len);/* appends */
const unsigned char * buffer(buffer_t * buf);/* returns accumulated data */
Sto pensando alla strategia di crescita dovrei scegliere per questo buffer.
Non so se i miei utenti preferirebbero la memoria o la velocità, o quale sarebbe la natura dei dati dell'utente.
Ho visto due strategie in natura: aumentare il buffer con incrementi di dimensione fissa (che è quello che ho attualmente implementato) o far crescere i dati in modo esponenziale. (C'è anche una strategia per allocare la quantità esatta di memoria necessaria - ma nel mio caso non è interessante.)
Forse dovrei lasciare che l'utente scelga la strategia ... Ma ciò renderebbe il codice un po 'più complesso ...
C'era una volta, Herb Sutter wrote (riferimento a Andrew Koenig) che la migliore strategia è, probabilmente, crescita esponenziale con fattore 1.5 (ricerca di "Strategia di crescita"). È ancora la scelta migliore?
Qualche consiglio? Cosa dice la tua esperienza?
Ehi, questa domanda ha alcuni dei migliori post di risposta che ho ricevuto su StackOverflow finora. Grazie a tutti per le vostre risposte! Ho accettato la risposta che ho trovato la più interessante - ma è stata una scelta difficile. Anche il resto delle risposte è abbastanza buono. Grazie! –