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

 
 
> Вопрос скорее по Си
_Артём_
сообщение Jun 1 2007, 15:17
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



В программе объявлен такой тип данных
Код
#define MAX_DATA_SIZE 128
struct TStructure {
    unsigned char DataSize;// размер данных
    unsigned char Data[MAX_DATA_SIZE];
};


Соответственно есть переменные такого типа:
Код
struct TStructure st1={
    3,
    {1,2,3}
};
struct TStructure st1={
    1,
    {1}
};


Структуры должны хранится в программной памяти и загружаться в ОЗУ соответственно ситуации.
Проблема в том, что Data может быть разной длины (от 1 до 128), то есть программная память зря расходуется.
Как определить структуру, чтобы поле Data имела размер не больше чем требуется?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jun 1 2007, 15:28
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



ИМХО, забейте на эту структуру! wink.gif Объявите одномерный массив
Код
unsigned char Data[MAX_DATA_SIZE+1];

И интерпретируйте его первый элемент (Data[0]) как валидный размер текущего массива. Соответственно ваши данные располагайте, начиная со второго элемента массива (Data[1]).
P.S. я понимаю, когда в структуру объединяют разнотипные данные, но зачем для однотипных структуру-то создавать? Если только для того чтобы "красиво" в тексте исходника выглядело, дык дефайны для этого имеются, типа
Код
#define DataSize Data[0]
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 1 2007, 17:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(rezident @ Jun 1 2007, 18:28) *
ИМХО, забейте на эту структуру! wink.gif

Совершенно неразумный совет.
Цитата
И интерпретируйте его первый элемент (Data[0]) как валидный размер текущего массива.

Ну зачем, о Господи! Если совершенно естественно именуется поле структуры а уж его "интерпретацией" должен заниматься компилятор. Зачем забивать себе и другим лишними знаниями, соглашениями и потенциальными ошибками.

Цитата(_Артём_ @ Jun 1 2007, 19:49) *
Пожалуй остановлюсь на массиве.

И, простите, как, это поможет проблеме???
Внимательно читайте пост defunct - Ваш вариант это динамическое выделение памяти.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 1 2007, 18:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(zltigo @ Jun 1 2007, 23:17) *
Совершенно неразумный совет.

Вы как всегда категоричны smile.gif Чем же он неразумен в применении к структуре однотипных переменных? Структура это всего лишь абстракция, предназначенная для удобства человека. Чтобы человек-программист мог на привычном для него объектном уровне изложить компилятору свою точку зрения на вид, размерность и порядок расположения переменных. Данные в памяти будут все равно в виде байтов, 16-ти или 32-разрядных слов располагаться, в соответствии со способом организации типа памяти конкретного МК.
Цитата(zltigo @ Jun 1 2007, 23:17) *
Ну зачем, о Господи! Если совершенно естественно именуется поле структуры а уж его "интерпретацией" должен заниматься компилятор.

Собственно я об этом же, только без обращения к Творцу smile.gif Только зачем она в приведенном автором топика примере?
Цитата(zltigo @ Jun 1 2007, 23:17) *
Зачем забивать себе и другим лишними знаниями, соглашениями и потенциальными ошибками.

Тогда нужно на Паскале писать, а не на Си. Делов-то!
Цитата(zltigo @ Jun 1 2007, 23:17) *
Внимательно читайте пост defunct - Ваш вариант это динамическое выделение памяти.

Читайте пост Сергея Борщ о том, какие проблемы бывают с незавершенными массивами.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Артём_   Вопрос скорее по Си   Jun 1 2007, 15:17
|- - _Артём_   Цитата(rezident @ Jun 1 2007, 18:28) P.S....   Jun 1 2007, 15:44
||- - rezident   Цитата(_Артём_ @ Jun 1 2007, 21:44) Данны...   Jun 1 2007, 16:30
||- - _Артём_   Цитата(rezident @ Jun 1 2007, 19:30) Вы с...   Jun 1 2007, 16:49
|- - zltigo   Цитата(rezident @ Jun 1 2007, 21:43) Стру...   Jun 1 2007, 19:00
|- - defunct   Цитата(rezident @ Jun 1 2007, 21:43) Чита...   Jun 1 2007, 21:24
|- - Сергей Борщ   Цитата(defunct @ Jun 2 2007, 00:24) сравн...   Jun 2 2007, 08:43
|- - defunct   Цитата(Сергей Борщ @ Jun 2 2007, 11:43) С...   Jun 2 2007, 12:40
|- - ReAl   Цитата(defunct @ Jun 2 2007, 15:40) Под o...   Jun 2 2007, 13:52
|- - defunct   Цитата(ReAl @ Jun 2 2007, 16:52) Т.е. раз...   Jun 2 2007, 16:42
|- - defunct   Цитата(ReAl @ Jun 2 2007, 16:52) (кстати,...   Jun 2 2007, 18:53
- - _artem_   первый элемент структуры (для всех структур) можно...   Jun 1 2007, 15:44
- - defunct   Как вариант - использовать "open array" ...   Jun 1 2007, 15:48
|- - Сергей Борщ   Цитата(defunct @ Jun 1 2007, 18:48) Как в...   Jun 1 2007, 18:20
|- - rezident   Цитата(Сергей Борщ @ Jun 2 2007, 00:20) 3...   Jun 2 2007, 18:24
|- - zltigo   Цитата(rezident @ Jun 2 2007, 21:24) Кста...   Jun 2 2007, 19:00
||- - rezident   Цитата(zltigo @ Jun 3 2007, 01:00) The ar...   Jun 2 2007, 19:16
||- - zltigo   ЦитатаЭта цитата означает что... Да. Цитата(rezide...   Jun 2 2007, 19:27
|- - Сергей Борщ   Цитата(rezident @ Jun 2 2007, 21:24) Кста...   Jun 2 2007, 19:52
|- - zltigo   Цитата(Сергей Борщ @ Jun 2 2007, 22:52) И...   Jun 2 2007, 20:11
|- - Сергей Борщ   Цитата(zltigo @ Jun 2 2007, 23:11) А каки...   Jun 2 2007, 20:37
|- - zltigo   Цитата(Сергей Борщ @ Jun 2 2007, 23:37) А...   Jun 2 2007, 21:38
- - sensor_ua   IMHO, лучше массивы не пытаться укладывать в струк...   Jun 1 2007, 16:23
|- - defunct   Цитата(sensor_ua @ Jun 1 2007, 19:23) IMH...   Jun 1 2007, 17:14
- - SasaVitebsk   Наверное присоединюсь к defunct и zltigo. И структ...   Jun 1 2007, 17:50
- - singlskv   Цитата(_Артём_ @ Jun 1 2007, 19:17) Струк...   Jun 1 2007, 22:15
|- - _Артём_   Цитата(singlskv @ Jun 2 2007, 01:15) Може...   Jun 1 2007, 22:33
|- - tag   Цитата(_Артём_ @ Jun 2 2007, 01:33) Пробл...   Jun 4 2007, 08:03
|- - _Артём_   Цитата(tag @ Jun 4 2007, 11:03) ...непоня...   Jun 4 2007, 21:14
|- - zltigo   Цитата(_Артём_ @ Jun 5 2007, 00:14) Вариа...   Jun 4 2007, 21:27
||- - _Артём_   Цитата(zltigo @ Jun 5 2007, 00:27) Ой...   Jun 5 2007, 20:20
||- - zltigo   Цитата(_Артём_ @ Jun 5 2007, 23:20) Приво...   Jun 5 2007, 20:30
||- - _Артём_   Цитата(zltigo @ Jun 5 2007, 23:30) Ну и п...   Jun 5 2007, 21:22
|- - Сергей Борщ   А про С++ в вопросе не было! Цитата(_Артём_ ...   Jun 5 2007, 08:14
|- - ReAl   Цитата(Сергей Борщ @ Jun 5 2007, 10:14) В...   Jun 5 2007, 10:17
|- - Oldring   Цитата(ReAl @ Jun 5 2007, 14:17) На мой в...   Jun 5 2007, 11:06
|- - rezident   Цитата(Oldring @ Jun 5 2007, 17:06) Если ...   Jun 5 2007, 11:09
|- - Oldring   Цитата(rezident @ Jun 5 2007, 15:09) Я эт...   Jun 5 2007, 11:44
- - sensor_ua   Цитатаприсваивать указателю на такую структуру адр...   Jun 2 2007, 12:41
- - sensor_ua   Если нужно, то указателем вполне пожно пользоватьс...   Jun 2 2007, 14:33
- - SasaVitebsk   Честно говоря я уже в рассуждениях несколько потер...   Jun 2 2007, 17:44
- - rezident   Цитата(Сергей Борщ)Или динамическое выделение памя...   Jun 2 2007, 20:31


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:18
Рейтинг@Mail.ru


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