Tuesday, December 6, 2016

C99 fast data type

C99 fast data type

這個主題是我在看完Efficient C Tip #13 – use the modulus (%) operator with caution這篇文章發現的C99在stdint.h新規範的一些資料型態,所作的小小理解。

C99 fast data type,為一種針對硬體CPU架構所提出的資料型態。主要有這下列八種型態:
uint_fast8_t        
uint_fast16_t
uint_fast32_t
uint_fast64_t
int_fast8_t        
int_fast16_t
int_fast32_t
int_fast64_t
在C99 7.18.1.3是這樣做定義的:
1 Each of the following types designates an integer type that is usually fastest 219) to operate
with among all integer types that have at least the specified width.
2 The typedef name int_fastN_t designates the fastest signed integer type with a width
of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer
type with a width of at least N .
也就是說,這些fast data type確保,你的型態至少為N bit以上(uint_fast8_t至少有8bit width),所以有可能你
宣告一個uint_fast8_t的型態,編出來可能是用16bit裝。
這個型態最重要的用意是aliginment(對齊),一般來說16bitCPU在處理16bit的資料運算有可能8bit的快,這是因為
對齊的因素,因此,這些fast data type在這個例子中直接將uint_fast8_t 定義為uint16_t,來方便CPU運算。

以下這是給16bit MCU的compiler microvhip XC16,在stdint.h中的定義
#ifndef uint_fast8_t                                                            
typedef unsigned int uint_fast8_t;                                              
#define uint_fast8_t uint_fast8_t                                               
#define UINT_FAST8_MAX (65535UL)                                                
#endif  
很明顯可以看到她將uint_fast8_t用unsigned int(16bit)來使用。

Efficient C Tip #13 – use the modulus (%) operator with caution中在16bit的MSP430,作者僅將型態改成,
fast data type,就得到了大幅的加速。在MCU等小型硬體中,在適當的地方使用C99 fast data type可以得到很好的效果。



No comments:

Post a Comment

精選文章

使用Ardunio Atmega2560 連接 nRF24L01+

使用Ardunio Atmega2560 連接 nRF24L01+ 關於library 目前主流有 https://github.com/maniacbug/RF24 與 https://github.com/TMRh20/RF24 這兩個。 其中TMRh20大大做...