【问题标题】:How and where is variable type information stored?变量类型信息如何以及在哪里存储?
【发布时间】:2015-02-13 07:17:12
【问题描述】:

如果我为 int 分配了内存,我将(通常)获得 4 个字节。据我了解,这 4 个字节构成了该变量在内存中的全部占用空间。

此外,如果我有一个指向这个 int 的指针,它将保存 4 个字节中第一个字节的地址。

但是,我的程序如何知道这 4 个字节中的数据类型由单个 int 组成?而且由于我的指针只保存这个地址,据说它只保存原始数据,它怎么知道每当它持有的地址被取消引用时,它应该被解释为一个 int?

此类型信息在哪里,程序如何以及何时访问它?

【问题讨论】:

  • it should be interpreted as an int..嗯,这就是为什么它是int *,而不是char *float *
  • 信息在源代码中,编译器生成机器码以尊重源代码中的规范。获得访问权限是编译器的工作。
  • 它不存储在编译程序的任何地方。处理它的是编译器。
  • 在弱类型语言中可能需要它,但在 C 等强类型语言中则不需要
  • 我猜你可能也对 malloc 块的大小感兴趣:stackoverflow.com/a/21185118/880584

标签: c pointers types


【解决方案1】:

一旦你编译了一个 C 程序,类型信息就会丢失(或者换句话说,它不再需要)。这是因为 C 中任何内存字节的解释取决于读取它们的代码。例如,您可以毫无问题地将四字节的int 读取为char[4]

在某些情况下,出于特殊原因(例如调试),可能会保留类型信息。但这是以特定于平台的格式存储的(例如 Linux 上的 DWARF),根本不是 C 标准的一部分。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    相关资源
    最近更新 更多