C标准要求sizeof(char)
1 ,无论实际需要多少位。
是否其他数据类型是根据字节或字符测量的,如果它们不相同的话?
基本上,假设CHAR_BIT
16 ,sizeof(int16_t)
是否等于 1 或 2 ?
答案 0 :(得分:13)
基本上,假设CHAR_BIT为16,sizeof(int16_t)将等于1或2
对象的大小(由sizeof
运算符产生)以字节为单位测量,C中的字节具有CHAR_BIT
位。
(C99,6.2.6.1p4)“存储在任何其他对象类型的非位字段对象中的值由nx个CHAR_BIT位组成,其中n是该类型对象的大小,以字节为单位。”
int16_t
类型(如果存在)的宽度恰好为16位且没有填充。这意味着如果CHAR_BIT == 16
,则sizeof (int16_t) == 1
答案 1 :(得分:12)
如果CHAR_BIT
为16且int16_t
存在,则为sizeof(int16_t) == 1
。 int8_t
类型不存在,因为C中的所有内容都必须以字节为单位进行测量(在这个系统中,每个字节都是16位......这就是为什么术语" octet"更多精确到"字节")。
有DSP系统和旧的超级计算机(早期的Cray系统)short
,int
,long
都有相同的大小,比如64位。
答案 2 :(得分:2)
对类型的大小没有限制;它们只需要能够代表值的最小范围。例如,对于一个平台来说所有它的基本类型是64位宽,并且每个sizeof
都是1
,这是完全合法的。
由于数组需要连续存储,并且必须可以访问相邻的数组元素而不会发明写入,因此平台可能必须选择“大char
s”以适应它可以独立寻址的最小内存单元。