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