Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизЗнатокам C++ Найти похожие ветки
← →
wicked © (2004-09-17 12:06) [0]такой вопрос - кошерно ли использовать
vector<unsigned char>
для организации буферизации данных?...
вопрос не праздный, поскольку сейчас такая конструкция используется мною и её недостатки ищезающе малы по сравнению с преимуществами...
но, может, я чего-то не учёл?...
← →
wicked © (2004-09-17 16:36) [1]уп....
знаю, знатоки есть.... но партизанят.... :)
← →
Suntechnic © (2004-09-17 18:24) [2]А что конкретно тебя смущает в данной конструкции?
Буферизация буферизации рознь как ты понимаешь :)
← →
wicked © (2004-09-17 18:44) [3]> Suntechnic [2]
смущает то, что
> её недостатки ищезающе малы по сравнению с преимуществами...
вот и спрашиваю - подвохи есть?...
> Буферизация буферизации рознь как ты понимаешь :)
используется, в частности, для буферизации при работе с ACM (по простому - wav"ки распаковывать)...
← →
Suntechnic © (2004-09-17 19:16) [4]>wicked ©
>вот и спрашиваю - подвохи есть?...
Я на большие камни не наталкивался. vector для того и придумали, чтобы обеспечить safety работу с массивами. Так что ничего кошерного в использовании vector в качестве буфера лично я не вижу.
← →
wicked © (2004-09-17 19:20) [5]угу, спасибо...
← →
wicked © (2004-09-17 19:50) [6][ЗЫ и оффтопик]
> Так что ничего кошерного в использовании vector в качестве
> буфера лично я не вижу.
а кошерный - это типа хороший... :)
например:
http://www.koogle.net/kosher.php
← →
Igorek © (2004-09-17 19:57) [7]
> wicked © (17.09.04 12:06)
> такой вопрос - кошерно ли использовать vector<unsigned char>
> для организации буферизации данных?...
Я бы так не делал. Обычно буфер имеет фиксированый размер, потому нету частого перевыделения памяти. Так что можно просто использовать
const MAX_BUF = 1024;
unsigned char buffer[MAX_BUF];
Впрочем никогда не работал с vector и не знаю специфики в твоем случае.
← →
wicked © (2004-09-17 20:06) [8]> Igorek [7]
обычно так и делается... точнее, делалось....
но что делать, если размер буффера наперед неизвестен?... брать максимальное "пессимистическое" значение?... так всё равно buffer overrun получить можно...
а так сказал емуfBuffer.resize(new_size, 0)
и никаких проблем...
повторюсь, преимуществ масса при почти отсутствующих недостатках...
волновали, в основном, подводные камни, которых я еще не нашел, а кто-то, возможно, набил уже на них шишки....
← →
KSergey © (2004-09-17 20:32) [9]> wicked © (17.09.04 20:06) [8]
Я, конечно, может чего не смыслю, по malloc не хуже бы справился в данном случае, по-моему...
← →
Verg © (2004-09-17 21:12) [10]
> wicked © (17.09.04 12:06)
> такой вопрос - кошерно ли использовать vector<unsigned char>
> для организации буферизации данных?...
Векторная организация данных, как ее прозвали сиплюсплюсники не имеет (по большому счету) ничего худшего по сравнению с dinamic arrays в Делфи world.
А кошерно (хотелось написат "кАшерно") или нет - это решать по-сути нашим голубокровым братьям, наверно :))
По краеней мере я, определения "кошерно" не понимаю...
Это как - вкусно, правильно, грамотно или шо?
Фаршированная щука - это кошерно или не ?
← →
wicked © (2004-09-17 21:12) [11]> KSergey [9]
вряд ли...
что проще и читабельней:if(new_size > buffer_size){
buffer = realloc(buffer, new_size);
memset(buffer + buffer_size, 0, new_size - buffer_size);
buffer_size = new_size;
}
илиif(new_size > buffer.size())
buffer.resize(new_size, 0);
?...
← →
wicked © (2004-09-17 21:19) [12]> Verg [10]
> Векторная организация данных, как ее прозвали сиплюсплюсники
> не имеет (по большому счету) ничего худшего по сравнению
> с dinamic arrays в Делфи world.
если вы заметили, то я не сравнивал vector<> и dynamic arrays...
но могу покритиковать и те, и другие... :)
я спрашивал о том, хорошо ли их использовать для тех целей, для которых они, в теории, и не предназначены.... никто не мешает завтра реализовать vector как deque (элементы не лежат в памяти подряд, как предполагалось), и плакали все наши построения...
> По краеней мере я, определения "кошерно" не понимаю...
> Это как - вкусно, правильно, грамотно или шо?
> Фаршированная щука - это кошерно или не ?
см. wicked [6]....
← →
Igorek © (2004-09-17 21:35) [13]
> wicked © (17.09.04 20:06) [8]
> > Igorek [7]
> обычно так и делается... точнее, делалось....
> но что делать, если размер буффера наперед неизвестен?...
> брать максимальное "пессимистическое" значение?... так всё
> равно buffer overrun получить можно...
Нет, ну ты всегда пишешь в буффер фикс. колл. байт.
Можешь сделать
В данном случае надо исходить из специфики твоей задачи. Моментов может быть много.
Напр.
- критичность быстродействия (для RealTime системы)
- частота перевыделения памяти
- момент, когда ты узнаешь размер буфера
- скорость добавления/удаления/поиска в списке
...
Вобщем это все из области оптимизации.
Но я предпочитаю собственную реализацию тривиальных вещей вместо библиотечных вариантов.
> KSergey © (17.09.04 20:32) [9]
> Я, конечно, может чего не смыслю, по malloc не хуже бы справился
> в данном случае, по-моему...
malloc - это рудимент С. В С++ лучше использовать new. :-)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c