使用 64 位体系结构
对于应用程序开发者,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 位。