我可以依赖sizeof(uint32_t)== 4吗?

时间:2014-07-24 08:51:19

标签: c++

我知道我可以依赖sizeof(char) == 1,但是sizeof(uint32_t)sizeof(uint8_t)呢? 不应该从名称猜测是32位(8位)? 谢谢!

3 个答案:

答案 0 :(得分:13)

固定大小的类型将始终完全相同。如果你在某个奇怪的平台上没有那个大小的整数类型,那么它们将是未定义的。

请注意,如果sizeof(uint32_t) == 4,它不一定遵循CHAR_BIT != 8;再次,这只发生在奇怪的平台上。

答案 1 :(得分:12)

绝对不是,至少与sizeof(uint32_t)有关。 sizeof返回字节数,而不是位数, 如果平台上的一个字节是16位,sizeof(uint32_t) 将是2,而不是4;如果一个字节是32位(和这样的平台 实际存在),sizeof(uint32_t)将为1(和uint32_t 可以是unsigned char)的typedef。

当然,在这种情况下,uint8_t将不会被定义。

答案 2 :(得分:2)

不,它完全依赖于您的编译器和架构(,即,如果您没有整数类型,它会给出不同的结果)。如果你得到CHAR_BIT == 8那么你可以依靠它。因此,如果您使用64位架构将与32位架构相同的64位边界对齐,则所有内容都与4个字节对齐。

因此,如果数据大小很重要(例如一组位标志),请始终使用固定大小的类型。