![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
в астере (asterisk.org, кто не знает), при формировании строки, при заползании за доступное пространство, используется следующая формула для расширения строки:
где need - это пространство необходимое для хранения строки заданной длины имеется ли математическая база под этой формулой? какие у вас мысли по этому поводу? -------------------- undefined |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
fish9370, для расширения С++ вектора используется формула вида size = size ? size * 2 : 1
Это стандартный метод экспоненциального увеличения. Т.е. чем больше у тебя текущий объем, тем больше резервируется. Причем, тут используется довольно пессимистичный вариант (возможно, для строк он актуален). |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
обе формулы - частные случаи x = k*x + c, поэтому
делает вобщем то же самое что и только с большей экономией (и потенциально более частой потребностью расширения) можно взять другие k и c, если есть основания (особенности задачи) Это сообщение отредактировал(а) baldina - 25.4.2013, 13:26 |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
я поинтересовался у разработчиков, это писал некий Kevin, говорят он большой мастер работы с памятью, к сожалению с ним мне поговорить так и не удалось..
это что та самая формула? линейное уравнение? но как я полагаю на нее накладываются определенные ограничения, связанные с выравниванием? -------------------- undefined |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
выравнивание тут непричем (да и не получается оно по этой формуле)
думаю большой мастер работы с памятью прикинул некий средний случай, его и реализовал (k=1.25). если строки изменяются чаще, а самих строк не так много, лучше подходит k=2 (как в std::vector). в какой-то реализации std::string я вроде бы видел k=1.5 |
|||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
1.25 тут тоже не получается, просто некий коэффициент.. да и тяжеловато деление, можно было решить все сдвигами.. одни вопросы.. -------------------- undefined |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
спасибо всем, baldina особый респект..
-------------------- undefined |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |