реклама на сайте
подробности

 
 
> Структуры данных
inventor
сообщение Jan 18 2018, 10:02
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Подскажите мне вот такую вещь
я хочу реализовать какой то хранитель или тип для данных разного размера
пример: по COM порту приходит пачка данных размером от
10 до 1000 байт.
я хочу положить их в свою структуру данных
данные разного размера
в какой то другом потоке я их забираю по указателю
если это что то типа связного списка или очередеи
то я вижу что там данные одного размера
чета я не понимаю, как мне сделать
чтобы хранить разный размер.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Baser
сообщение Jan 18 2018, 17:51
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(inventor @ Jan 18 2018, 12:02) *
я хочу реализовать какой то хранитель или тип для данных разного размера
пример: по COM порту приходит пачка данных размером от
10 до 1000 байт.
я хочу положить их в свою структуру данных
данные разного размера

Если вы хотите статический буфер, то придется выделять память под максимальный размер данных.
Далее применять union, как расписал ArtemKAD

Если же вы хотите каждый раз иметь буфер различной длины по размеру пришедшего пакета,
то применяйте динамическое выделение памяти из heap, при помоши malloc/free.
В первом слове буфера храните длину данных,
указатель на буфер передавайте в другой поток для чтения. Семафоры не забудьте.
Go to the top of the page
 
+Quote Post
inventor
сообщение Jan 19 2018, 07:42
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(Baser @ Jan 18 2018, 20:51) *
Если вы хотите статический буфер, то придется выделять память под максимальный размер данных.
Далее применять union, как расписал ArtemKAD

Если же вы хотите каждый раз иметь буфер различной длины по размеру пришедшего пакета,
то применяйте динамическое выделение памяти из heap, при помоши malloc/free.
В первом слове буфера храните длину данных,
указатель на буфер передавайте в другой поток для чтения. Семафоры не забудьте.


похоже придется сделать кольцевой буфер на максимальное число
с malloc/free мне не нравится-так как засегментируется все за час
при интенсивном использовании
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 19 2018, 10:14
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(inventor @ Jan 19 2018, 10:42) *
кольцевой буфер на максимальное число

Зачем кольцевой? Почему не линейный?
Приняли посылку разной длины - разобрали, начиная с начала (сохраняя поля в структуру), поставили указатель на начало, начали опять принимать.
Если нужно принимать во время разбора - можно принимать в другой буфер, все равно в обоих случаях размер памяти не меняется.
Протокол обмена стандартный или самопал?



--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016