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字节


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