Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-1095748241
PulSS
2004-09-21 10:30
2004.10.03
Help - помогите заполнить дв. массив по диагоналям, зигзагом


4-1093464085
dRake
2004-08-26 00:01
2004.10.03
TBitmap.LoadFromFile - Какое исключение?


14-1095081368
Vovchik_A
2004-09-13 17:16
2004.10.03
Система переводов Анелик


1-1095247693
DKazurov
2004-09-15 15:28
2004.10.03
Передача параметров в поток


1-1095162356
Луарвик
2004-09-14 15:45
2004.10.03
TForm1.BitBtn1MouseDown(Sender: TObject...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский