Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Знатокам 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
3-1094605386
AleKo
2004-09-08 05:03
2004.10.03
DBGridEh вместо запятой точка


1-1095631439
TechnoDreamer
2004-09-20 02:03
2004.10.03
Как скопировать текст из RichEdit в RichEdit?


4-1093120848
Getsevich
2004-08-22 00:40
2004.10.03
Закрытие процесса


1-1095394809
Геннадий
2004-09-17 08:20
2004.10.03
Теоритический вопрос по деструктору


8-1087894955
Borealis
2004-06-22 13:02
2004.10.03
Изображения ключевых кадров из авишки (RIFF_AVI)