C 库的某些部分不能进行优化以提高速度,尽管这样做对大多数应用程序有益。某些示例:
整数运算例程-当前 SPARC V8 处理器支持整数乘法和除法指令。但是,如果标准 C 库例程要使用这些指令,则在 V7 SPARC 处理器上运行的程序将由于内核仿真开销而运行慢,或者完全中断。因此,在标准 C 库例程中不能使用整数乘法和除法指令。
双字内存访问-如果块复制和移动例程(如 memmove() 和 bcopy())使用 SPARC 双字装入和存储指令(ldd 和 std),其运行速度会显著提高。有些内存映射的设备(如帧缓冲器)不支持 64 位访问;但是,如果使用了 memmove() 和 bcopy(),这些设备便可正常工作。因此,在标准 C 库例程中不能使用 ldd 和 std。
内存分配算法-C 库例程 malloc() 和 free() 在旧的 UNIX 程序中通常在综合考虑速度、空间和编码错误的非敏感性的基础上实现。基于“伙伴系统”算法的内存分配器通常比标准库版本运行得快,但会占用更多空间。
libfast.a 是一个特定于 SPARC 的 32 位版标准 C 库,为单线程、单可执行文件应用程序提供优化的内存分配。由于它是可选库,因此它可以使用尽管对大多数应用程序可以提高性能,但是可能不适合标准 C 库的算法和数据表示。
使用文件配置确定以下清单中的例程对于您应用程序的性能是否重要,然后根据该清单确定 libfast.a 是否有益于性能:
如果内存分配的性能很重要,并且分配的块大小普遍接近 2 的幂,请务必使用 libfast.a。这些重要例程是: malloc()、free()、realloc()。
如果块移动或块填充例程的性能很重要,请务必使用 libfast.a。这些重要例程是: bcopy()、bzero()、memcpy()、memmove() 和 memset()。
如果应用程序为多线程应用程序,请勿使用 libfast.a。
链接应用程序时,将选项 -lfast 添加到链接时使用的 cc 命令中。在标准 C 库中,cc 命令会先于相应的其他命令链接 libfast.a 中的例程。