【问题标题】:What will be the word length,size of int & pointer on a 8,16,32 & 64 bit micro controllers on a c program? [closed]c 程序上 8、16、32 和 64 位微控制器上的字长、int 大小和指针是多少? [关闭]
【发布时间】:2019-06-13 13:59:03
【问题描述】:

我听说不同的微控制器会有不同的字长。所以c程序上的结构填充分别在8位,16位,32位和64位微控制器中有所不同。如果是这种情况,还请告诉我这些控制器上的 int 大小和字长指针的大小

【问题讨论】:

  • 在为相同架构进行编译时,它甚至可能因编译器而异。 C++ 标准提供了某些最低限度的保证(例如,int 至少为 16 位),如果可用,您可以使用具有定义大小的类型(例如 int64_t)。但我不认为你得到的远不止这些。
  • sizeof(char) <= sizeof(short) && sizeof(short) <= sizeof(int) && sizeof(int) <= sizeof(long) && sizeof(long) <= sizeof(long long) 通常被认为在任何地方都是正确的。
  • 您已标记 C++,但在您的问题中仅提及 C。
  • @EugeneMart 没有理由这样说。
  • @EugeneMart 这不是真的。许多微控制器具有扩展的寻址模式,但只能处理更少量的数据。几乎所有 8 位和 16 位 MCU 都是这种情况。

标签: c embedded embedded-linux microcontroller


【解决方案1】:

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

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

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

这些取决于目标系统(具体架构,以及可能的系统软件)。

int 的大小正好是 sizeof(int) 字节,也就是 sizeof(int) * CHAR_BIT 位。不少于 16 位。

指向T 的指针的大小正好是sizeof(T*) 字节,也就是sizeof(T*) * CHAR_BIT 位。 char*void* 的大小足以表示所有地址。在现代系统中,所有数据指针都具有相同大小是相当普遍的,但标准并不能保证这一点。

【讨论】:

    【解决方案2】:
    sizeof(char)=1
    

    CHAR_BITchar 类型的位长度。至少为 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_
    

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      相关资源
      最近更新 更多