Comments 2
Решение проблемы было простым: выполнять увеличение экспоненциально, а не линейно.
Как вариант: посмотреть свои показатели и подобрать более удобную функцию. Закатывая глаза и говоря проще (:
buf->capacity = buf->capacity ? buf->capacity + 1000 : 100;
// Или:
buf->capacity = buf->capacity ? buf->capacity * 10 : 100;
// Или:
buf->capacity = buf->capacity ? buf->capacity * 1.5 : 15;
// А то и сразу, смело:
buf->capacity = buf->capacity ? buf->capacity + 2000000 : 2000000; // Не умножать только. Мы не настолько богатые и обеспеченные памятью :)
// Хотя двойка это классика для неизвестных размеров.
// А может вообще муть вытворять с вычислениями по последним расходам памяти, свободной оперативке, потенциальным требованиям, времени суток и нагруженности процессора в текущий момент — дичь, но бывает.
// Или статический массив брать нужного размера — да-да, так можно, пускай статья не об этом.Но это лишь мелкие придирки, конечно же. Нужно смотреть по ситуации — помним об этом ;)
P.s. А ведь функции (математические, для вычисления нового размера ;) могут быть и сложнее — математика не запрещает и по-прежнему работает... Хотя кому это может понадобиться?..
Sign up to leave a comment.
Структуры данных на практике. Глава 8: Динамические массивы и управление памятью