Easyelectronics.ru

Электроника для всех
Текущее время: 25 авг 2019, 18:46

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Развлекаемся с компилятором С/С++
СообщениеДобавлено: 16 мар 2019, 00:42 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1505
Откуда: void
Дано:
Код:
struct A {
  uint8_t hrs  : 4;
  uint8_t mins : 4;
  uint8_t local;
};

struct B {
  uint8_t hrs  : 4;
  uint8_t mins : 4;
  uint_fast8_t local;
};


Ключик -О2, платформа ARM Cortex. Кто правильно угадает все значение sizeof/alignof?

Show Ответ тут


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Развлекаемся с компилятором С/С++
СообщениеДобавлено: 16 мар 2019, 03:18 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2292
Откуда: Китай, Пекин
An uint_fast8_t is the fastest integer guaranteed to be at least 8 bits wide. Depending on your platform it could be 8 or 16 or 32 bits wide.

Ы?

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Развлекаемся с компилятором С/С++
СообщениеДобавлено: 16 мар 2019, 16:54 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2312
uint_fast8_t означает: дать мне unsigned int не менее 8 бит. Выберите более крупный тип, если он ускорит мою программу из-за соображений выравнивания. Оптимизируйте скорость.



Выравнивание можно отключить

Код:
#pragma pack(push, 1)
typedef struct RX_Packet {
uint8_t player_id;   //идентификатор попавшего в нас игрока
uint8_t team_id;   //идентификатор (цвет) его команды
uint8_t damage;      //приченённый нам урон
} trx_packet;
#pragma pack(pop)




sizeof(trx_packet) выдаст ровно 3 байта


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Развлекаемся с компилятором С/С++
СообщениеДобавлено: 16 мар 2019, 21:40 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1505
Откуда: void
Я это на самом деле к тому, что именно из-за выравнивания как побочный эффект произошло раздувание битовых полей с 8 до 32 бит. Вообще, я почему-то думал, что на Cortex-M платформах, операции с данными 16-бит выполняются не дольше 32-битных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Развлекаемся с компилятором С/С++
СообщениеДобавлено: 16 мар 2019, 21:52 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2292
Откуда: Китай, Пекин
Цитата:
Вообще, я почему-то думал, что

Изображение

неси зачётку...

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Развлекаемся с компилятором С/С++
СообщениеДобавлено: 16 мар 2019, 22:15 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2015, 17:37
Сообщения: 1505
Откуда: void
Задело, да? Это хорошо, это правильно. Может хоть изредка будут верные мысли в голове появляться.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB