У меня есть общий растущий буфер, который, как ожидается, накапливает "случайные" строковые фрагменты, а затем извлекает результат. Код для обработки этого буфера написан на простой C.
API псевдокода:
void write(buffer_t * buf, const unsigned char * bytes, size_t len);/* appends */
const unsigned char * buffer(buffer_t * buf);/* returns accumulated data */
Я думаю о стратегии роста, которую я должен выбрать для этого буфера.
Я не знаю, предпочитают ли мои пользователи память или скорость - или какова будет характер пользовательских данных.
Я видел две стратегии в дикой природе: расти буфера с фиксированными размерами (это то, что я сейчас реализовал) или увеличивать данные по экспоненте. (Существует также стратегия выделения точного объема необходимой памяти - но это не так интересно в моем случае.)
Возможно, я должен позволить пользователю выбрать стратегию... Но это сделало бы код немного более сложным...
Давным-давно Herb Sutter написал (ссылаясь на Эндрю Кенига), что лучшая стратегия - это, вероятно, экспоненциальный рост с коэффициентом 1.5 (поиск для "Стратегии роста" ). Это лучший выбор?
Любые советы? Что говорит ваш опыт?