在c程序中的8、16、32和64位微控制器上,字长,int和指针的大小是多少?

时间:2019-06-13 13:59:03

标签: c embedded embedded-linux microcontroller

我听说不同的微处理器具有不同的字长。因此,c程序的填充结构分别在8位,16位,32位和64位微控制器上有所不同。如果是这样,还请告诉我这些控制器上的整数大小和带有字长的指针大小

2 个答案:

答案 0 :(得分:1)

  

在8、16、32和64位微控制器上的字长是多少...

取决于微控制器。有一个table of word lengths of different CPU architectures on wikipedia。如果未列出您的芯片,则需要查阅手册或与供应商联系。

  

在c程序中int和指针的大小?

这取决于目标系统(特定的体系结构以及可能的系统软件)。

sizeof(int)的大小将精确地为sizeof(int) * CHAR_BIT字节,也就是T位。不少于16位。

指向sizeof(T*)的指针的大小将恰好为sizeof(T*) * CHAR_BIT个字节,也就是char*个位。 void*和{{1}}的大小足以代表所有地址。在现代系统上,所有数据指针都具有相同的大小是很普遍的,但这不是标准所保证的。

答案 1 :(得分:0)

sizeof(char)=1

CHAR_BIT char 类型的长度(以位为单位)。至少为8。如果为小于8的数据总线编写C编译器,则必须进行几次访存才能访问char。

这是惯例。

现在,在CHAR_BIT中,可以根据长度的限制为其他类型选择任何长度。例如,不允许C的 int 类型少于16位, long 至少具有32位, long long 至少具有64。

关于指针和sizeof(void*)的表示,C不施加任何限制。指针的表示没有大小限制。

举一个更奇特的例子,如果您的体系结构中 char 用64位表示,而整数用64位表示,则sizeof(int)为1。sizeof(type)为预计算,以使类型的位数等于CHAR_BIT乘以sizeof(type)

CHAR_BIT*sizeof(type) = number of bits used to represent _type_