对于应用程序开发者,Solaris 64 位和 32 位环境的主要区别在于所使用的 C 语言数据类型的模型。64 位数据类型使用 LP64 模型,其中 long 和指针的宽度为 64 位,其他所有基础数据类型仍然与 32 位实现的数据类型相同。32 位数据类型使用 ILP32 模型,其中的 int、long 和指针宽度为 32 位。
以下简要概述了 64 位环境的主要特征以及使用该环境时的注意事项:
大虚拟地址空间
在 64 位环境中,进程的虚拟地址空间最高可达 64 位(即 18 EB)。目前,32 位进程的最大地址空间为 4 GB,较大的虚拟地址空间大约是其 40 亿倍。但是由于硬件限制,某些平台可能并不支持完整的 64 位地址空间。
大地址空间增加了可创建的具有缺省栈大小的线程数。在 32 位和 64 位系统中,栈的大小分别为 1 MB 和 2 MB。 在 32 位和 64 位系统中,具有缺省栈大小的线程数分别是大约 2000 个和 80000 亿个。
内核内存读取器
内核是在内部使用 64 位数据结构的 LP64 对象。这意味着,使用 libkvm、/dev/mem 或 /dev/kmem 的现有 32 位应用程序不能正常工作,必须转换为 64 位程序。
/proc 限制
使用 /proc 的 32 位程序可以查看 32 位进程,但是无法识别 64 位进程。用来描述进程的现有接口和数据结构不够大,因此无法包含 64 位值。对于此类程序,必须将其重新编译为 64 位程序,使其可同时适用于 32 位进程和 64 位进程。
64 位库
32 位库必须与 32 位应用程序进行链接,而 64 位库必须与 64 位应用程序进行链接。除已过时的库以外,所有的系统库都同时提供 32 位版本和 64 位版本。
64 位运算
64 位运算早已在以前的 32 位 Solaris 发行版中提供。现在,64 位实现提供了完整的 64 位计算机寄存器,用于进行整数运算和参数传递。
大文件
如果应用程序仅要求大文件支持,则可以保留 32 位并使用大文件接口。要充分利用 64 位功能,必须将应用程序转换为 64 位。