-qfuncsect
适用的调用
选项 | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
---|---|---|---|---|
-qfuncsect | ✓ | ✓ | ✓ | ✓ |
类别
等效编译指示
xlc/xlC 和其他遗留的调用命令 | xlclang/xlclang + + 调用命令 |
---|---|
#pragma 选项 [no] funcsect | 无 |
用途
将每个函数的指示信息放在单独的 对象文件控制部分或 CSECT中。 将每个函数放在它自己的 部分或 CSECT 中可能会减小程序的大小,因为链接程序可以收集每个函数而不是每个对象文件的垃圾。
当指定了 -qfuncsect时, 编译器会从每个函数生成对静态数据区的引用 (如果存在) ,以确保如果该对象文件中的任何函数包含在最终可执行文件中,那么还会包含静态数据区。 这样做是为了确保编译指示注释中的任何静态字符串或字符串 (可能包含版权信息) 也包含在可执行文件中。 在某些情况下,这可能导致在链接时出现代码臃肿或未解析的符号。
当 -qnofuncsect 生效时,每个对象文件都由一个 控制 部分组成,该部分组合了相应源文件中定义的所有函数。 您可以使用 -qfuncsect 将每个函数放在单独的 控件 部分中。
在先前发行版中, -qfuncsect 对 C++ 程序进行了最小的大小缩减。 您应该会看到当前发行版中的改进。
语法
缺省值
-qnofuncsect
参数
- implicitstaticref | noimplicitstaticref
- 指定是否保留静态变量,虚拟函数表或异常处理表中包含的函数 对对象文件的静态数据部分的引用。在 XL C/C++ for AIX® V11.1之前的发行版中,所有异常处理表都放置在一个静态数据部分中。 包含一个异常处理表意味着还包含所有其他表。 因此,对未使用的异常处理表中的函数的引用会阻止链接程序对这些函数进行垃圾回收,否则将清除这些函数。 从 XL C/C++ for AIX V11.1开始,通过为每个异常处理表分配其自己的 TOC 条目来解决此问题。 因此,最终可执行文件的大小可能会减小。注: XL C/C++ for AIX, V11.1 增强功能启用大型 TOC 访问,这将不限制 TOC 条目数。
当您的代码包含用于版权 信息的#pragma注释指令或静态字符串时,编译器会自动将这些字符串放置在静态数据区域,并在目标代码中生成对这些静态数据区域的引用。
当 -qfuncsect=implicitstaticref 生效时,将生成对静态区域的引用,即使未以其他方式引用也是如此。
当 -qfuncsect=noimplicitstaticref 生效时,仅当程序引用时,才会生成对静态区域的引用。
指定不带子选项的 -qfuncsect 意味着 -qfuncsect=implicitstaticref。
使用量
使用多个 control 部分可增加对象文件的大小,但 它 可以通过允许链接程序除去未被调用或已被优化器在其被调用的所有位置内联的函数来减小最终可执行文件的大小。
必须在编译单元中的第一个语句之前指定 pragma 伪指令。
预定义的宏
无。