由于整型和长型在 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
此外,相对于 int 或 unsigned int 数组,大型的 long 或 unsigned long 数组可能会导致 LP64 数据类型模型出现严重的性能下降。大型的 long 或 unsigned long 数组还可能会导致显著增加缓存未命中的情况,并占用更多的内存。
因此,如果对于应用程序而言 int 与 long 的效果一样好,最好使用 int,而不要使用 long。
该参数也适用于使用 int 数组来代替指针数组。某些 C 应用程序在转换为 LP64 数据类型模型后出现显著的性能下降,这是因为它们依赖于很多较大的指针数组。