__m128i類型的解析

          對於SSE2指令集來說用到頻率最高的的參數或返回類型,在這篇文章裏看一下它定義的原型,並對他進行分析:

          __m128i類型定義在emmintrin.h中,先來看一下它定義的原型:

         typedef union __declspec(intrin_type) _CRT_ALIGN(16) __m128i {
                                                                                                                                   __int8                          m128i_i8[16];
                                                                                                                                   __int16                        m128i_i16[8];
                                                                                                                                   __int32                        m128i_i32[4];   
                                                                                                                                   __int64                        m128i_i64[2];
                                                                                                                                   unsigned __int8        m128i_u8[16];
                                                                                                                                   unsigned __int16      m128i_u16[8];
                                                                                                                                   unsigned __int32      m128i_u32[4];
                                                                                                                                   unsigned __int64      m128i_u64[2];
                                                                                                                                   } __m128i;

          其中_CRT_ALIGN的定義如下:

                  #if !defined(_CRT_ALIGN)
                  #if defined(__midl)
                  #define _CRT_ALIGN(x)
                  
#else
                  #define _CRT_ALIGN(x) __declspec(align(x))
                 
#endif
                  #endif

        另外:__int8 數據類型與類型 char是同義詞的, __int16 與類型short是同義詞的,__int32 與類型 int是同義詞的,__int64 與類型long long是同義詞的

        首先:__m128i 爲一個共用體(或又稱,“聯合”,union) 類型,union的特點爲:共用體表示幾個變量共用一個內存位置,在不同的時間保存不同的數據類型和不同長度的變量。在union中,所有的共用體成員共用一個空間,並且同一時間只能儲存其中一個成員變量的值。當一個共用體被聲明時, 編譯程序自動地產生一個變量, 其長度爲聯合中最大的變量長度的整數倍。所以__m128i的大小爲128字節;

           其次:__declspec(align(16))是設定內存對齊方式,來保證__m128i的大小爲128字節;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章