我知道我可以依赖sizeof(char) == 1
,但是sizeof(uint32_t)
和sizeof(uint8_t)
呢?
不应该从名称猜测是32位(8位)?
谢谢!
答案 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个字节对齐。
因此,如果数据大小很重要(例如一组位标志),请始终使用固定大小的类型。