Сергей Борщ 140 19 марта, 2008 Опубликовано 19 марта, 2008 · Жалоба Производительность !. Код с упакованными структурами меделеннее и более емкий. так как компилятор начинает с структурой по байтово работать.Так сделайте два варианта структур - один неупакованный для работы и второй упакованный для передачи. Упакованная структура может иметь единственный конструктор с неупакованной в качестве аргумента. Да, придется для каждого типа вручную написать присваивание всех полей. Но это действительно переносимый способ и рыбку съесть и ... дальше вы знаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 19 марта, 2008 Опубликовано 19 марта, 2008 · Жалоба Производительность !. Код с упакованными структурами меделеннее и более емкий. так как компилятор начинает с структурой по байтово работать. Абсолютно не о том - в данном случае автор имеет НЕЯВНО УПАКОВАННУЮ структуру - подобрал последовательность полей до получения УПАКОВКИ, которая его устраивает. Работает точно так-же, как и явно упакованная структура. Только с упоством достойным лучшего применения ни он ни Вы не желаете явно указать компилятору паковать структуру и получить реальный sizeof() этой структуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 20 марта, 2008 Опубликовано 20 марта, 2008 (изменено) · Жалоба Абсолютно не о том - в данном случае автор имеет НЕЯВНО УПАКОВАННУЮ структуру - подобрал последовательность полей до получения УПАКОВКИ, которая его устраивает. Работает точно так-же, как и явно упакованная структура. Только с упоством достойным лучшего применения ни он ни Вы не желаете явно указать компилятору паковать структуру и получить реальный sizeof() этой структуры. Я против применения расширений компилятора, применяю только в исключительных случаях. Сегодня один компилятор хорош, завтра другой, у одного можно так сделать у другого нельзя. А переползать с такими директивами с компилятора на компилятор не весело. Поэтому предпочел обойтись #define STRUCT1_SIZE 10 дабы стандартного способа измерить структуру (т.е. размер объявленных переменных в ней (в выровненной )) с точностью до байта автоматически при компиляции не оказалось. Изменено 20 марта, 2008 пользователем Vitaliy_ARM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 20 марта, 2008 Опубликовано 20 марта, 2008 · Жалоба Поэтому предпочел обойтись #define STRUCT1_SIZE 10 Каждый сам себе Буратино, но хуже варианта я даже представить не могу. Собственно это даже не "вариант" - это манипуляции с бубном. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 20 марта, 2008 Опубликовано 20 марта, 2008 · Жалоба Каждый сам себе Буратино, но хуже варианта я даже представить не могу. Собственно это даже не "вариант" - это манипуляции с бубном. Предложите вариант лучше без использования IAR-ских спец. директив Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 20 марта, 2008 Опубликовано 20 марта, 2008 · Жалоба Предложите вариант лучше без использования IAR-ских спец. директив Не сочтите за труд, наконец прочитать ответ на Ваш вопрос и подумать над тем использовать-ли абсолютно не документированные и именно IAR-овские и конкретно не переносимые реализации паковки структрур, причем дополненнные абсолютно мутными крнстантами, либо использовать совершенно НЕ IAR-овский и имеющийся абсолютно у всех не 8-бит компиляторов механизм паковки структур. Sapienti Sat. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 20 марта, 2008 Опубликовано 20 марта, 2008 (изменено) · Жалоба Не сочтите за труд, наконец прочитать ответ на Ваш вопрос и подумать над тем использовать-ли абсолютно не документированные и именно 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 и должен признать, этот вариант лучше. Паковка есть практически во всех компиляторах. Изменено 20 марта, 2008 пользователем Vitaliy_ARM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 20 марта, 2008 Опубликовано 20 марта, 2008 · Жалоба Получается последний вариант самый лучший... Ура!!! Вот тут http://electronix.ru/forum/index.php?showt...6&hl=packon есть подарочек для бездумной переносимости на разные компиляторы - ваял под все мной используемые: PACK_on_off.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться