Linux的编程模型ILP32和LP64

Linux的编程模型

  • 编程模型

Linux的编程模型ILP32和LP64_第1张图片

在标准C中规定,长整型(无论无符号或者有符号)至少占用32位

64位Linux采用的是LP64模型,这意味着Long, Pointer都是8字节。32位Linux采用的是ILP32模型,也就是Int Long Pointer均为4字节。Windows下32位是ILP32,64位是LLP64。

标准没有规定 long 长度,这是编译器和系统选择的。在OS的ABI中应当有数据类型大小的定义。

以下引自维基 64位数据模型

在32位程序中,指针和数据类型(例如整数)通常具有相同的长度。在64位计算机上不一定是这样。因此,在C等编程语言及其后代(例如C ++和Objective-C )中混合数据类型可能适用于32位实现,但不适用于64位实现。

在许多用于64位计算机上C和C派生语言的编程环境中,int变量仍然是32位宽,但是长整数和指针是64位宽。这些被描述为具有LP64 数据模型。另一个替代方法是ILP64数据模型,其中所有三种数据类型均为64位宽,甚至是短整数也为64位宽的SILP64。但是,在大多数情况下,所需的修改相对较小且简单明了,许多编写良好的程序可以简单地为新环境重新编译而无需更改。另一种替代方法是LLP64模型,它通过使两个保持与32位代码的兼容性int和long为32位。LL指的是long long整数类型,在包括32位环境在内的所有平台上至少为64位。
Linux的编程模型ILP32和LP64_第2张图片

  • 64位架构(Intel)
    x86-64
    x86-64( 又称x64,即英文词64-bit extended,64位拓展的简写)是x86架构的64位拓展,向后兼容16位及32位的x86架构。x64于1999年由AMD设计,AMD首次公开64位集以扩展x86,称为“AMD64”。其后也被英特尔所采用,现在英特尔称之为“Intel 64”,在之前曾使用过“Clackamas Technology” (CT)、“IA-32e”及“EM64T”。

在Intel的开发手册上,用IA-32e表示64位的处理器架构

Linux的编程模型ILP32和LP64_第3张图片
实践参考
将 Linux 应用程序移植到 64 位系统上

你可能感兴趣的:(GNU/Linux)