跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:C 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
32 位和 64 位编译环境之间的最大差异是数据类型模型的更改。
32 位应用程序的 C 数据类型模型是 ILP32 模型,之所以这样命名是因为整型、长型和指针是 32 位数据类型。LP64 数据模型(之所以这样命名是因为长型和指针增长为 64 位)由业界各公司联合创建。其余 C 类型 int、long long、short 和 char 在这两种数据类型模型中相同。
无论数据类型模型如何,C 整型间的标准关系始终为真:
sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)
下表列出基本 C 数据类型及其对于 ILP32 和 LP64 数据模型的相应长度(位数)。
表 7-1 ILP32 和 LP64 的数据类型长度
|
当前 32 位应用程序通常假设整型、指针和长型的长度相同。但是,长型和指针的长度在 LP64 数据模型中发生了更改,这会导致许多 ILP32 至 LP64 转换问题。
此外,声明和强制类型转换也非常重要。如果更改类型,计算表达式结果的方式会受到影响。标准 C 转换规则的效果受数据类型长度更改的影响。要充分表示您的意图,您需要显式声明常量的类型。您也可以在表达式中使用强制类型转换,以确保表达式按您想要的方式求值。特别是在进行符号扩展时,显式强制类型转换对说明意图至关重要,此时此做法更有必要。