处理目录 (TOC) 溢出
要处理目录 (TOC) 溢出,您可以减少全局符号的数量、扩大 TOC 访问范围或应用过程间分析。
程序中全局符号的地址存储在称为 TOC 的数据结构中。 要访问全局符号,必须从 TOC 中检索全局符号的地址。 缺省 TOC 数据结构具有可存储固定数目的全局符号的固定大小。 例如, IBM PowerPC® 体系结构使用具有带符号 16 位偏移量的指令进行间接地址计算,并将 TOC 的大小限制为 64 KB。 最多可将 16 K 个条目以 32 位方式存储在 TOC 中,而将 8 K 个条目以 64 位方式存储在 TOC 中。
对于大型应用程序, 公共 具有的全局符号多于可以存储在缺省 TOC 中的全局符号。 如果应用程序包含的 TOC 条目数超过 TOC 可容纳的数目,那么链接程序将报告 TOC 溢出,这指示必须使用替代机制。 使用以下方法来处理 TOC 溢出:
- 通过以下方式减少程序中的全局符号数:
- 更改源代码。 它是减少全球符号数量的最佳方法。
- 指定 -qminimaltoc 选项。
- 通过指定 -qipa 选项来应用过程间分析。 如需了解该选项的更多信息,请参阅 《使用跨过程分析和充分利用 -qipa 》。
- 通过指定以下选项来扩大 TOC 访问范围:
- -bbigtoc (链接程序选项)
- -qpic=large