Linux数据模型和基元类型大小

时间:2017-10-05 15:53:22

标签: c++ linux linux-kernel primitive-types

我知道存在以下数据模型:

  • 32位* nix: ILP32
  • 32位Windows: ILP32
  • 32位OS X: ILP32
  • 64位* nix: LP64
  • 64位Windows: LLP64
  • 64位OSX: LP64

http://www.unix.org/whitepapers/64bit.html

64位版本的Linux内核使用LP64数据模型(http://www.unix.org/version2/whatsnew/lp64_wp.html)。

更新

C ++ 03标准$ 5.3.3 / 1

  

sizeof(char),sizeof(signed char)和sizeof(unsigned char)为1;该   sizeof应用于任何其他基本类型(3.9.1)的结果是   的实现定义即可。 [注意:特别是sizeof(bool)和   sizeof(wchar_t)是实现定义的.69)

所以真正的问题是: 编译器(例如gcc)是否考虑了OS选择的数据模型(例如linux)?

1 个答案:

答案 0 :(得分:0)

编译器为特定目标编译。有些编译器只有一个目标或一组非常有限的目标。由于您要求使用gcc作为示例,因此查看其文档会显示Machine DescriptionsTarget Files的格式。

Their documentation mentions

  

默认情况下,GCC会为您使用的相同类型的计算机编译代码。但是,它也可以作为交叉编译器安装

因此,请务必检查gcc -vgcc -dumpmachine的输出,看看默认目标是什么。