2

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

既然 Snow Leopard 和 Lion 都是 64 位的,那么 C 或 Objective-C 程序可以在 Xcode 上编译成int64 位吗?(并且“%d”或“%i”也将采用 64 位整数)。还是int出于兼容性原因保留为 32 位?

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

更新:我刚刚发现sizeof(NSInteger)Xcode 在 Lion 上的控制台应用程序中打印的是否为 8(它与 typedef 一样长),如果它在 iOS 5.1.1 上,那么它是 4(typedef as int)。 sizeof(int)在两个平台上都是 4。所以它看起来在某种程度上,int之前从 16 位移动到 32 位,但现在我们确实希望将其停止在 32 位。

4

3 回答 3

3

在 Apple 采用的LP64数据模型下,int 始终为 32 位。一些编译器可能允许您改用ILP64数据模型,如此处的评论中所述。但是,您可能会破坏与预编译库的兼容性。

于 2012-06-07T10:38:41.653 回答
1

可以在 Xcode 上编译 C 或 Objective-C 程序以使 int 为 64 位吗?

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

如果使用 64 位 int,它会比 32 位更快,因为 64 位是本机的吗?

我看不出为什么使用 32 位ints会比使用 64 位慢ints。事实上,它们可能会更快,因为您可以在缓存中容纳两倍的它们。

于 2012-06-07T11:12:17.170 回答
0

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

但是 int 是 32 位有一个很好的理由:出于兼容性原因,许多代码需要具有 8 位、16 位、32 位和 64 位项目的能力。C 中可用的类型有 char、short、int、long 和 long long。您不希望 long 或 long long 小于 int。如果 int = 64 位,则对于三种尺寸(8、16 和 32 位)只有两种类型(char 和 short),因此您必须放弃其中一种。

于 2014-05-07T14:55:59.373 回答