【问题标题】:Are data models - ILP32 or LP64 decided by OS or the Hardware Architecture?数据模型 - ILP32 或 LP64 是由操作系统或硬件架构决定的吗?
【发布时间】:2020-10-14 14:27:37
【问题描述】:

我正在阅读 C 中的固定大小数据类型 - (u)intN_t

而且我明白,使用这些数据类型可以确保程序员准确地保证该数据类型的位数。

我很想知道这是如何在内部执行的,经过一番研究后我了解到,通过头文件,它们将被定义为 -

typedef char int8_t;
typedef short int16_t;

我知道这些 typedef 是在 <stdint.h> 中定义的,基于 data model 类型,后面跟着 平台。即是否-

  1. ILP32 或
  2. LP64 或
  3. ILP64 或
  4. LL64 等

因此,如果平台遵循 ILP32 数据模型,那么 int64_t 将被定义为 -

typedef long long int64_t;

如果平台遵循 LP64 数据模型,那么 int64_t 将被定义为 -

typedef long int64_t;

但我无法理解的是这里的平台是什么?

平台是否指硬件架构类型 - x86、x86_64 或 AMD 等

或者它是指一个操作系统,比如 Solaris、AIX、HP-UX、Linux、macOS、BSD 或 IBM z/OS 等

data model 类型是由操作系统还是由硬件架构决定的?

【问题讨论】:

    标签: c types compiler-construction


    【解决方案1】:

    平台是指硬件架构类型 - x86、x86_64 还是 AMD 等

    是的

    或者它是指操作系统,如 Solaris、AIX、HP-UX、Linux、macOS、BSD 或 IBM z/OS 等

    是的!

    例如 ILP32 和 LP64 表示在前者的 ints 中,longs 和 pointers 都是 32 位;而在后者中,long 和指针是 64 位的。

    虽然您可以将 64 位指针用于 32 位内存空间,但这太愚蠢了,因为每个指针会消耗 64 位,但您只会真正使用其中的一半。就像您始终只在每张纸的左/上半部分打印一样。但处理器支持还不够,因为操作系统也必须支持。 x86 处理器支持多种操作模式,从 16 位实模式一直到 64 位长模式 - 一套硬件,多种平台选项。您可以在 64 位处理器上运行 32 位操作系统。并且您可以在 64 位处理器上运行 64 位操作系统中的 32 位程序!

    当我在我的计算机上运行 Linux 中的程序时,它们是 ILP32 和 LP64。当我启动到 Windows 时,那里的程序遵循 ILP32 和 LLP64 模型......所以即使在同一组硬件上,我也可以有两个操作系统,其中有两个“平台”可供选择。在 Linux 领域中,用户空间库的选择在 C 开发中也很重要,因此这两个常见的 Linux 平台将被称为 x86_64-pc-linux-gnui386-pc-linux-gnu。

    【讨论】:

    • “当我在我的计算机上运行 Linux 中的程序时,它们是 ILP32 和 LP64。” - 你的意思是Linux下的程序可以在ILP32或LLP64中运行吗?当您说在操作系统内部有两个平台时 - 您是指操作系统的两个不同实例,一个在 32 位模式下运行,另一个在 64 位模式下运行?
    • 在标准 amd64 硬件上:32 位 Windows 应用程序:ILP32LL64; 32位Linux应用:ILP32LL64(同); 64 位 Windows 应用程序:IL32LLP64,64 位 Linux 应用程序:I32LP64
    • 不,64 位 Intel Linux 操作系统(可能)能够同时运行 32 位 ILP32 和 64 位 LP64 程序
    • 所以我可以从中推断出 - user programs(可执行)是遵循特定 data model 类型的那些。编译器是强制执行特定可执行文件 (user program) 遵循哪种数据模型的编译器。 operating system (executable) 也将遵循特定的数据模型。并且data model 执行OS 的决定在某种程度上 受到OS 正在运行的hardware architecture 的影响。当我说 有点 - OS 必须使用 32 变体数据模型,并且不能在 32 位硬件上使用 64 位变体数据模型。 继续-
    • cont-... 但是操作系统可以在 32 位机器上选择遵循 ILP32 还是 LP32。我的理解正确吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多