В C я работаю над "классом", который управляет байтовым буфером, позволяя добавлять произвольные данные до конца. Теперь я просматриваю автоматическое изменение размера, поскольку основной массив заполняется с помощью вызовов realloc
. Это должно иметь смысл для всех, кто когда-либо использовал Java или С# StringBuilder
. Я понимаю, как изменить размер. Но есть ли у кого-нибудь какие-либо предложения с обоснованием, на сколько увеличить буфер при каждом изменении размера?
Очевидно, что между потерянным пространством и чрезмерными вызовами realloc (что может привести к чрезмерному копированию), существует компромисс. Я видел некоторые уроки/статьи, которые предлагают удвоение. Это кажется расточительным, если пользователю удастся дать хорошее начальное предположение. Стоит ли пытаться округлить до некоторой степени два или несколько от размера выравнивания на платформе?
Кто-нибудь знает, что делает Java или С# под капотом?