For application developers, the major difference between the Solaris 64–bit and 32–bit operating environments is the C–language data type model used. The 64–bit data type uses the LP64 model where longs and pointers are 64–bits wide. All other fundamental data types remain the same as those of the 32–bit implementation. The 32–bit data type uses the ILP32 model where ints, longs, and pointers are 32–bits.
The following summary briefly describes the major features and considerations for using the 64–bit environment:
Large Virtual Address Space
In the 64-bit environment, a process can have up to 64 bits of virtual address space, or 18 exabytes. This is 4 billion times the current 4 Gbyte maximum of a 32-bit process. Because of hardware restrictions, however, some platforms might not support the full 64 bits of address space.
Large address space increases the number of threads that can be created with the default stack size (1 megabyte on 32 bits, 2 megabytes on 64 bits). The number of threads with the default stack size is approximately 2000 threads on a 32–bit system and 8000 billion on a 64–bit system.
Kernel Memory Readers
Because the kernel is an LP64 object that uses 64-bit data structures internally, existing 32-bit applications that use libkvm, /dev/mem, or /dev/kmem do not work properly and must be converted to 64-bit programs.
A 32-bit program that uses /proc is able to look at 32-bit processes, but is unable to understand a 64-bit process; the existing interfaces and data structures that describe the process are not large enough to contain the 64-bit quantities involved. Such programs must be recompiled as 64-bit programs to work for both 32-bit and 64-bit processes.
32–bit applications are required to link with 32–bit libraries, and 64–bit applications are required to link with 64–bit libraries. With the exception of those libraries that have become obsolete, all of the system libraries are provided in both 32–bit and 64–bit versions. However, no 64–libraries are provided in static form.
Though 64–bit arithmetic has long been available in previous 32–bit Solaris releases, the 64–bit implementation now provides full 64–bit machine registers for integer operations and parameter passing.
If an application requires only large file support, then it can remain 32-bit and use the Large Files interface. It is, however, recommended that the application be converted to 64-bit to take full advantage of 64-bit capabilities.