mac os X 64位

Mac OS X是Apple Macintosh操作系统中第一个支持64位计算的版本,其可充分利用64位PowerPC G5处理器的能力,然而,这并不意味着必须把每一个应用程序都迁移到64位平台上去。大多数的OS X程序不必移植为64位,实际上,作为32位程序,它们还能执行得更快一些。把一个程序移植为64位,其最主要的原因还是因为想访问超过4GB的内存,此 类的程序包括工程与科学计算、实时渲染、大型数据库等等。一个比较好的做法是,在决定是否需要移植到64位之前,先检查一下程序所运行的环境——也许它不 需要程序移植呢?

Ø 64位数学库。在运行于PowerPC G5处理器之上的OS X中,你不必为了要进行64位算术运算而移植到64位;PowerPC可在32位模式中支持64位算术指令。在GCC中使用-mcpu=G5编译选项以打 开对G5的特定优化,也可使用-mpowerpc64选项允许64位指令,同时使用以上两个选项可在32位程序中提高性能。
Ø Apple 公司已经宣布Mac平台将会转换为Intel CPU。而Intel的处理器,如64位的至强(Xeon),要求程序必须为64位,以利用那些64位通用寄存器(此处与PowerPC不同)。因此,在 Mac架构完全变为Intel处理器之后,你需要重新评价是否应该移植到64位上——特别当你的程序是整数密集型时。
Ø 64 位的数据类型。你不必仅是为了访问64位数据而移植到64位,例如,long long与int64_t都是64位的,但却能在32位程序中使用。
Ø 需 要更快的代码?如果你的程序对性能要求敏感并且已为32位高度优化过了,那就不必移植到64位了。64位指针所带来的尺寸上的增长,会增加缓存压力,同样 也会消耗更多的磁盘空间、占用更多的内存、更高的网络占用率,这些都会导致程序性能降低。

“干净”的64
一 旦决定把一个程序移植到64位,那么首先要保证代码对64位而言是“干净”的——也就是说,没有受任何其他的“杂质污染”。Mac OS X(包括其他任何从Unix派生来的操作系统)使用的64位C语言数据模型通常被称为“LP64”,在LP64数据模型中,int是32位,而long与 指针是64位;相对而言,32位的数据模型被称为“ILP32”,即int、long、指针全部都是32位的。
在ILP32与LP64之间,因为 long与指针大小存在差异,当假定它们与int大小一样时,将会导致数值截断。大多数的64位移植问题能在GCC中通过-Wall -Wformat -Wmissing-prototypes -Wconversion -Wsign-compare -Wpointer这些编译选项可发现。(有关更多信息,请参考《向64位进军》一文。)
这里要澄清一点:在OS X Tiger操作系统中,并不是所有的OS X API都支持64位计算,例如,像Cocoa与Carbon之类的Framework就不支持64位开发。这意味着,不能只是简单地重新编译一下32位图 形界面(GUI)程序,就可以把它们当作OS X上的64位程序使用了,只有命令行程序能被重新编译为64位。然而,这也不是说GUI程序就不能搭上64位计算的顺风车了,下文将要说明,怎样做才能移 植一个32位的OS X GUI程序到64位平台上。