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

 
 
> в чем разница fast uint8_t от uint8_t?
Метценгерштейн
сообщение Apr 28 2017, 14:28
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Для чего используют fast?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
Kabdim
сообщение Apr 28 2017, 14:56
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Запрос на чтение документации вслух. sm.gif
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Apr 28 2017, 15:02
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



к сожалению, не нашел в инете внятного объяснения.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 28 2017, 15:09
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Метценгерштейн @ Apr 28 2017, 17:28) *
Для чего используют fast?


Может регистровая переменная, может в "быстром" сегменте памяти.
А в каком это компиляторе такое ?
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Apr 28 2017, 15:09
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



в IAR точно было
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 28 2017, 15:19
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Метценгерштейн @ Apr 28 2017, 18:09) *
в IAR точно было

не помню такого (для MSP430). Возможно какойто макрос - надо рыться в инклудах иаровских.
Или какая-то специфика под конкретный таргет - например константы
для контроллера Atmel 8515 должны быть размещены во внутреннем флеш,
а не внешней памяти.

ps

typedef _INT_FAST8_T_TYPE_ int_fast8_t;

Сообщение отредактировал k155la3 - Apr 28 2017, 15:23
Go to the top of the page
 
+Quote Post
Baser
сообщение Apr 28 2017, 15:24
Сообщение #7


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

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



Действия с int_leastN_t и int_fastN_t типами стандартом отданы на усмотрения компиляторов.
Единственно оговорено, что длина этого типа должна быть не менее N.
А дальше - как решит компилятор.
uint_fast8_t для ARM-ов точно будет располагаться в полном 32-х разрядном слове, но логически будет ограничено 8-ю битами.
А uint_least8_t - как будет удобнее компилятору для данной конкретной архитектуры.

А вот работа с uint8_t будет приводить к дополнительным командам, для применения именно 8-и разрядных команд (если они есть).
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 28 2017, 15:26
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



уже полез, так
----
uint_fast8_t
typedef unsigned char uint_fast8_t;
typedef unsigned short uint_fast16_t;
typedef unsigned long uint_fast32_t;
typedef unsigned long long uint_fast64_t;

The types each specify an unsigned integer type that supports the fastest operations among those whose representation has at least eight, 16, 32, or 64 bits, respectively. Note that the definitions shown here are merely representative.

Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 6 2017, 10:47
Сообщение #9


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Метценгерштейн @ Apr 28 2017, 17:28) *
Для чего используют fast?

Для скорости, очевидно!
Основная идея - улучшение переносимости программ между архитектурами с разной разрядностью АЛУ.
Например, на AVR uint_fast8_t будет 8-ми битным, а на Cortex-m уже 32-ух битным.
Его следует использовать, фактически, повсеместно, кроме как в протоколах передачи данных.
Я использую эти типы в счётчиках цикла, в качестве аргументов функции, а также в качестве возвращаемого функцией значения, локальные временные и статические переменные и т.д....

Чтобы понять суть, напишите код для Cortex-m, с использованием uint_fast8_t и uint8_t, и посмотрите во что выливается компиляция такого кода:
Цитата
i++;


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
VadymEngineer
сообщение Oct 30 2017, 09:50
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-10-17
Пользователь №: 99 982



Цитата(Метценгерштейн @ Apr 28 2017, 16:28) *
Для чего используют fast?

Согласно С99:
  • uint_fast8_t - тип данных, который содержит не менее 8 бит и операции с которым являются самыми быстрыми на данной платформе
  • uint_least8_t - самый маленький тип данных для данной платформы, который содержит не менее 8 бит
  • uint8_t - тип данных, который содержит ровно 8 бит, однако имеет место специфика работы с платформой - если разрядность не позволяет, то такого типа для данной платформы существовать не должно (в отличие от двух вышеперечисленных)

Хороший пример приведён в ответе тут и в сообщениях форумчан.
Использование таких типов с фиксироваными размерами(uint8_t, int32_t etc.) является предпочтительным относительно типов unsigned char, unsigned int etc. - это указано многими правилами кодирования (MISRA C, например). Посмотреть как те или иные типы фиксированого размера соотносятся с типами данных plain C для конктретной платформы можно посмотреть в заголовке <stdint.h>.
Go to the top of the page
 
+Quote Post

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

 


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


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