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

 
 
10 страниц V  « < 8 9 10  
Reply to this topicStart new topic
> EWARM 5.10
Сергей Борщ
сообщение Mar 19 2008, 14:08
Сообщение #136


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MALLOY2 @ Mar 19 2008, 14:30) *
Производительность !. Код с упакованными структурами меделеннее и более емкий. так как компилятор начинает с структурой по байтово работать.
Так сделайте два варианта структур - один неупакованный для работы и второй упакованный для передачи. Упакованная структура может иметь единственный конструктор с неупакованной в качестве аргумента. Да, придется для каждого типа вручную написать присваивание всех полей. Но это действительно переносимый способ и рыбку съесть и ... дальше вы знаете.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 19 2008, 15:31
Сообщение #137


Гуру
******

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



Цитата(MALLOY2 @ Mar 19 2008, 15:30) *
Производительность !. Код с упакованными структурами меделеннее и более емкий. так как компилятор начинает с структурой по байтово работать.

Абсолютно не о том - в данном случае автор имеет НЕЯВНО УПАКОВАННУЮ структуру - подобрал последовательность полей до получения УПАКОВКИ, которая его устраивает. Работает точно так-же, как и явно упакованная структура. Только с упоством достойным лучшего применения ни он ни Вы не желаете явно указать компилятору паковать структуру и получить реальный sizeof() этой структуры.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 20 2008, 15:09
Сообщение #138


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Mar 19 2008, 18:31) *
Абсолютно не о том - в данном случае автор имеет НЕЯВНО УПАКОВАННУЮ структуру - подобрал последовательность полей до получения УПАКОВКИ, которая его устраивает. Работает точно так-же, как и явно упакованная структура. Только с упоством достойным лучшего применения ни он ни Вы не желаете явно указать компилятору паковать структуру и получить реальный sizeof() этой структуры.


Я против применения расширений компилятора, применяю только в исключительных случаях. Сегодня один компилятор хорош, завтра другой, у одного можно так сделать у другого нельзя. А переползать с такими директивами с компилятора на компилятор не весело. Поэтому предпочел обойтись
#define STRUCT1_SIZE 10
дабы стандартного способа измерить структуру (т.е. размер объявленных переменных в ней (в выровненной )) с точностью до байта автоматически при компиляции не оказалось.

Сообщение отредактировал Vitaliy_ARM - Mar 20 2008, 15:11


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 15:15
Сообщение #139


Гуру
******

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



Цитата(Vitaliy_ARM @ Mar 20 2008, 18:09) *
Поэтому предпочел обойтись
#define STRUCT1_SIZE 10

Каждый сам себе Буратино, но хуже варианта я даже представить не могу. Собственно это даже не "вариант" - это манипуляции с бубном.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 20 2008, 15:18
Сообщение #140


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Mar 20 2008, 18:15) *
Каждый сам себе Буратино, но хуже варианта я даже представить не могу. Собственно это даже не "вариант" - это манипуляции с бубном.



Предложите вариант лучше без использования IAR-ских спец. директив


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 15:45
Сообщение #141


Гуру
******

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



Цитата(Vitaliy_ARM @ Mar 20 2008, 18:18) *
Предложите вариант лучше без использования IAR-ских спец. директив

Не сочтите за труд, наконец прочитать ответ на Ваш вопрос и подумать над тем использовать-ли абсолютно не документированные и именно IAR-овские и конкретно не переносимые реализации паковки структрур, причем дополненнные абсолютно мутными крнстантами, либо использовать совершенно НЕ IAR-овский и имеющийся абсолютно у всех не 8-бит компиляторов механизм паковки структур.
Sapienti Sat.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 20 2008, 16:40
Сообщение #142


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Mar 20 2008, 18:45) *
Не сочтите за труд, наконец прочитать ответ на Ваш вопрос и подумать над тем использовать-ли абсолютно не документированные и именно IAR-овские и конкретно не переносимые реализации паковки структрур, причем дополненнные абсолютно мутными крнстантами, либо использовать совершенно НЕ IAR-овский и имеющийся абсолютно у всех не 8-бит компиляторов механизм паковки структур.


Прочитал, подумал, проверил:

Код
#pragma pack(1)
    struct First
{
  char alpha;
  DWORD beta;
};

struct First dataa;

dataa.alpha = 0;
dataa.beta = 0x2134;


на последние две строчки уходит около 18 команд (побайтная обработка).

если так
Код
//#pragma pack(1)

тогда 5 тактов.

А если сделать так:
#pragma pack(1)
struct First
{
DWORD beta;
char alpha;
};

Получились те же 5 тактов и sizeof(dataa) дает 5 байт.
Получается последний вариант самый лучший, и скорость таже и sizeof(работает). Вывод: в моем случае самому заботиться о выравнивании и использовать паковку.
Просмотрел ссылки, как эта http://electronix.ru/forum/lofiversion/index.php/t30833.html и должен признать, этот вариант лучше. Паковка есть практически во всех компиляторах.

Сообщение отредактировал Vitaliy_ARM - Mar 20 2008, 16:41


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 16:58
Сообщение #143


Гуру
******

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



Цитата(Vitaliy_ARM @ Mar 20 2008, 19:40) *
Получается последний вариант самый лучший...

Ура!!! Вот тут http://electronix.ru/forum/index.php?showt...6&hl=packon есть подарочек для бездумной переносимости на разные компиляторы - ваял под все мной используемые:
PACK_on_off.rar


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

10 страниц V  « < 8 9 10
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


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


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