---
title: 使用方式
description: "编译选项中加入此选项开启LTO。可通过-flto=n指定LTO的并发数，如使用auto可以指定与GNU make一致（如果可以获取）或是与当前机器线程数一致的并发数。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/hgcc/hist-hgcc/kunpenghgcc_06_0062.html
sourcePath: /source/zh/kunpengdevkithistory/hgcc/hist-hgcc/kunpenghgcc_06_0062.html
indexId: 52d2fe454397e3a77c762ea24273b67bb5b3340de0beb2b291f663b75bf6929f71
---
# 使用方式

#### 选项-flto=

编译选项中加入此选项开启LTO。可通过-flto=n指定LTO的并发数，如使用auto可以指定与GNU make一致（如果可以获取）或是与当前机器线程数一致的并发数。


#### 选项-ffat-lto-objects

该选项将生成同时包含汇编信息和LTO信息的目标文件。并且在-ffat-lto-objects开启的情况下，允许通过-fno-lto选项，使用目标对象文件的汇编信息，来完成常规的链接，而不执行链接时优化。


#### 选项-flto-partition=1to1|balanced|max|one|none

该选项可以通过引入不同的分区策略从而加快编译速度。

- 1to1意味着分区与源文件一一对应。
- balanced控制每个分区在规模上相等。
- max会为每一个符号创建一个分区。
- one会尽量生成一个分区。
- none会直接跳过全程序分析以及分区的环节。


#### 选项-flto-compression-level=n

该选项用以控制LTO对象文件中IR信息的压缩等级。


#### DEMO

```
// four.c
int four()
{
    return 4;
}
```

```
// five.c
int five()
{
  return 5;
}
```

```
// test.c
extern int four();
extern int five();
int main()
{
  return four() + five();
}
```

```
gcc -O2 -flto test.c four.c five.c
# 或者
gcc -O2 -flto -c test.c
gcc -O2 -flto -c four.c
gcc -O2 -flto -c five.c
gcc test.o four.o five.o
```

在上述案例中，当使用LTO生成可执行文件时，表达式four() + five()会被内联并经过常量折叠，直接优化为立即数 9，从而省略了函数调用和运行时计算的开销，这在非 LTO 模式下是无法实现的。 如果仅对four.c和test.c生成了 LTO 对象文件，最终结果便成了4 + five()，仅部分LTO对象文件参与了局部范围内的链接时优化。
