是否可以编译Objective-C程序以使int为64位?

时间:2012-06-07 08:56:30

标签: objective-c c xcode

如果我没记错的话,在某台机器上,int为16位,当我们移动到32位平台时,int为32位。

现在Snow Leopard和Lion是64位,可以在Xcode上编译C或Objective-C程序,以便int是64位吗? (和“%d”或“%i”也将采用64位整数)。或者int出于兼容性原因保持为32位?

(如果使用64位int,它会比32位更快,因为64位是原生的吗?)

更新:我刚发现sizeof(NSInteger)如果在控制台应用中打印,则狮子座上的Xcode是8(它的typedef为长),如果是在iOS 5.1.1上,那么它是4(typedef as int)。两个平台上的sizeof(int)均为4。所以看起来在某种程度上,int之前从16位移到了32位,但现在我们确实想要将它停在32位。

3 个答案:

答案 0 :(得分:3)

在Apple采用的 LP64 数据模型下,int总是32位。有些编译器可能允许您使用 ILP64 数据模型,如评论here中所述。但是,您可能会破坏与预编译库的兼容性。

答案 1 :(得分:1)

  

可以在Xcode上编译C或Objective-C程序,以便int是64位吗?

我无法找到使int 64位宽的clang选项。事实上,平台标题似乎假设它不可能。此外,您将无法使用任何以int作为参数的平台库函数/方法(包括在格式字符串中指定printf()类型的int之类的内容)。< / p>

  

如果使用64位int,它是否会比32位快,因为64位是原生的?

我认为没有理由使用32位ints比使用64位ints慢。事实上,它们可能更快,因为你可以在缓存中容纳两倍的数量。

答案 2 :(得分:0)

要获得int = 64位的编译器,您必须下载Clang源代码并手动修改它。因此,对于现有的gcc或Clang编译器,没有办法。

但是有一个很好的理由将int设为32位:由于兼容性原因,许多代码需要具有8位,16位,32位和64位项的能力。 C中可用的类型是char,short,int,long和long long。你不希望长或长的小于int。如果int = 64位,那么对于三种大小(8,16和32位),你只有两种类型(char和short),所以你必须放弃其中一种。