Oracle® Solaris Studio 12.4:C 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

7.3.2 整型和长型长度更改

由于整型和长型在 ILP32 数据类型模型中从未真正加以区分,因此现有代码可能会不加区分地使用它们。修改交换使用整型和长型的任何代码,使其可同时符合 ILP32 和 LP64 数据类型模型的要求。整型和长型在 ILP32 数据类型模型中均为 32 位,而 long 在 LP64 数据类型模型中为 64 位。

请看以下示例:

int waiting;
long w_io;
long w_swap;
...
waiting = w_io + w_swap;

%
warning: assignment of 64-bit integer to 32-bit integer

此外,相对于 intunsigned int 数组,大型的 longunsigned long 数组可能会导致 LP64 数据类型模型出现严重的性能下降。大型的 longunsigned long 数组还可能会导致显著增加缓存未命中的情况,并占用更多的内存。

因此,如果对于应用程序而言 int 与 long 的效果一样好,最好使用 int,而不要使用 long

该参数也适用于使用 int 数组来代替指针数组。某些 C 应用程序在转换为 LP64 数据类型模型后出现显著的性能下降,这是因为它们依赖于很多较大的指针数组。