在OS X上转移到64位的最佳做法是什么?使用10.6 SDK和64位intel作为我的SDK和目标。在OS X上转移到64位?
我有INT32种类改变
确实OS X有一个“的Int64”或者一个会用一个“很长很长”?
我在哪里可以找到可用数据类型的资源?
还有哪些其他问题?
在OS X上转移到64位的最佳做法是什么?使用10.6 SDK和64位intel作为我的SDK和目标。在OS X上转移到64位?
我有INT32种类改变
确实OS X有一个“的Int64”或者一个会用一个“很长很长”?
我在哪里可以找到可用数据类型的资源?
还有哪些其他问题?
Apple正好有您需要的文档,名为64-bit transition guide。 OS X使用LP64模型,所以你应该使用
#ifdef __LP64__
等根据位宽有条件编译的东西,特别是如果你希望你的代码是32位/ 64位清洁。 对于可可,请参阅64 bit Transition Guide for Cocoa。在那里,根据模式,NSInteger
具有合适的位宽,所以你不必自己处理位宽。
两个long
和long long
是64位的各类建筑在OS X上的64位时,此外,你可以,如果你需要指定一个整数的宽度正好是64位使用<stdint.h>
定义的int64_t
和uint64_t
类型。
除非用于执行指针运算(或者取决于它们与指针的大小相同),否则通常不需要在程序中更改现有的int32
类型。 32位算术在64位程序中继续工作得很好。如果您的确实的变量必须与指针的大小相同,请使用uintptr_t
类型,该类型可以在32位和64位版本中使用。
其他情况下,你可能需要做出改变是,如果一个API希望传递(或收益)一size_t
或long
或intptr_t
,并且您已经使用int
这一切的时候了,而不是什么功能问题实际上指定。它将在32位版本上工作,但可能在为64位构建时引入错误。
Yuji的建议阅读64位转换指南是非常好的建议。
@stephen - 我们需要的应用程序只有64位。 – 2010-04-05 20:45:37
@stephen - 你能多解释一下吗?我只想成为64位。我使用10.5 SDK和64位intel作为我的目标设置。我有int16,in32和一些longs。 – 2010-04-05 22:19:11
@ML - 您是否尝试过在不改变任何内容的情况下构建64位应用程序?如果你的代码没有对指针做任何“聪明的事情”,它可能正常工作。 – 2010-04-05 22:47:43
@yuji - 我们需要的应用程序只有64位。 – 2010-04-05 20:45:55