如果我没记错的话,在某台机器上,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位。
答案 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),所以你必须放弃其中一种。