STM32 枚舉類型 內存大小

枚舉類型大小與編譯器有關,在STM32平臺,kei 5編譯器,默認情況下枚舉類型的內存大小與枚舉的最大值的字節大小相同:

定義以下枚舉類型:

typedef enum
{
test00 =0x0,
    test01
}Test0;

打印大小如下:


此處最大的枚舉值爲0x01,只需要1個字節就可以滿足需要,因此編譯器把此類型的大小隻用一個字節來保存!

再開下面的,最大值是0x100,超出0xFF,並且小於0xFFFF,猜測用2位字節表示即可!

typedef enum
{
test10 =0x0,
    test11 = 0x100,
    test12
}Test1;

結果如下:

猜測正確,2字節

再看:

typedef enum
{
test20 =0x0,
    test21 = 0x10000,
    test22

}Test2;

最大值是0x1000,超出0xFFFF,並且小於0xFFFFFFFF,猜測用4位字節表示即可!

結果如下:

猜測又正確,4字節

再看:

typedef enum
{
test30 =0x0,
    test31 = 0x100000000,
    test32

}Test3;

最大值是0x100000000,超出0xFFFFFFFF,並且小於0xFFFFFFFFFFFFFFFF,猜測用8位字節表示即可!

結果如下:

 又對了,但是...

在kei5 平臺下,不運行超出4字節的枚舉類型,超出部分是未知的,比如我們打印出來test31的值,它並非0x100000000:

在我的電腦裏運行的值是0x6000D0,在你們的電腦可能又不一樣了。

實際上在定義這個值的時候,編譯器就警告了。



由此可以推出,在STM32平臺下,枚舉類型最大爲4字節,朋友們可以在其它平臺做測試(比如64位的WINDOWS系統!)

keil5 還可以直接強制設置所有枚舉型都是整形:


編譯後運行看看:


注意Test0、Test1、Test2變成4字節了,Test3還是8字節,但是它不可用。

因此:

1、枚舉類型大小與編譯器有關,在STM32平臺,kei 5編譯器,默認情況下枚舉類型的內存大小與枚舉的最大值的字節大小相同,但最大字節數不超過4字節,超出部分不可用,情況未知

2、可以通過編譯器設定,強制將任何一種枚舉型都轉爲4字節


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