GCC 13.2 编译 C 程序全流程拆解:从源代码到可执行文件的深度实践指南
1. 理解编译流程的核心价值
当我们按下回车键执行
gcc main.c
命令时,背后隐藏着一系列精密的转换过程。这些看似自动化的步骤实际上决定了程序能否正确运行、性能如何优化,甚至关系到安全漏洞的防范。对于中高级开发者而言,掌握GCC编译的完整流程意味着:
- 精准调试 :能够定位到预处理、编译、汇编或链接阶段的特定错误
- 性能调优 :理解每个阶段对最终代码质量的影响
- 构建控制 :灵活控制大型项目的编译过程和依赖关系
- 安全防护 :识别编译过程中的潜在风险点
现代C项目的构建系统(如CMake、Makefile)本质上都是对这些基础步骤的自动化封装。让我们通过GCC 13.2的最新特性,深入剖析这个将人类可读代码转化为机器指令的精密过程。
2. 实验环境准备
2.1 工具链配置
推荐使用最新版本的GCC工具链以获得最佳性能和特性支持:
# Ubuntu/Debian系统安装命令
sudo apt update && sudo apt install build-essential gcc-13 -y
# 验证安装
gcc-13 --version | head -n1
典型输出应显示:
gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
2.2 示例代码准备
创建具有典型特征的测试文件
demo.c
:
// demo.c
#include <stdio.h>
#define PI 3.1415926
#define CIRCLE_AREA(r) (PI*(r)*(r))
int main() {
// 计算半径为5的圆面积
float area = CIRCLE_AREA(5);
printf("Area: %.2f\n", area);
return 0;
}
3. 编译四阶段深度解析
3.1 预处理阶段:代码的第一次变形
执行预处理命令:
gcc-13 -E demo.c -o demo.i
关键变化观察:
-
宏完全展开
:所有
#define被替换为实际值 -
头文件注入
:
#include <stdio.h>被替换为数百行声明 - 源码净化 :注释被移除,添加行号标记
提示:使用
-dM参数可查看所有宏定义gcc-13 -E -dM demo.c | grep -i '^#define'
3.2 编译阶段:从C到汇编的跨越
生成汇编代码:
gcc-13 -S demo.i -o demo.s
现代GCC 13.2的编译过程包含多个优化阶段:
| 优化阶段 | 作用描述 | 对应GCC参数 |
|---|---|---|
| 语法树构建 | 构建抽象语法树(AST) | -fdump-tree-all |
| RTL生成 | 生成寄存器传输语言 | -fdump-rtl-all |
| 指令选择 | 选择目标架构指令 | -fdump-ipa-all |
| 寄存器分配 | 优化寄存器使用 | -fopt-info |
查看优化报告:
gcc-13 -S -fopt-info demo.i -o demo.s
3.3 汇编阶段:生成机器码的奥秘
生成目标文件:
gcc-13 -c demo.s -o demo.o
使用
objdump
分析目标文件结构:
objdump -drwCS demo.o
关键信息解读:
- 节区(Sections) :.text(代码)、.data(初始化数据)、.bss(未初始化数据)
- 重定位信息 :标记需要链接器处理的符号引用
- 调试信息 :DWARF格式的调试数据(如有-g参数)
3.4 链接阶段:构建最终可执行体
静态链接示例:
gcc-13 demo.o -o demo -static
动态链接分析工具:
ldd ./demo
GCC 13.2的链接器改进:
- 更智能的符号冲突检测
- 改进的调试信息合并
- 增强的LTO(链接时优化)支持
4. 高级技巧与实战应用
4.1 多文件编译管理
项目结构示例:
project/
├── src/
│ ├── math_utils.c
│ └── math_utils.h
└── main.c
高效编译方法:
# 并行编译(利用多核CPU)
gcc-13 -c src/math_utils.c -o obj/math_utils.o &
gcc-13 -c main.c -o obj/main.o &
wait
# 最终链接
gcc-13 obj/*.o -o project
4.2 调试信息生成
生成带调试信息的可执行文件:
gcc-13 -g3 -Og demo.c -o demo_debug
调试信息等级说明:
-
-g1:最小调试信息(仅堆栈展开) -
-g2:标准调试信息(GDB基本支持) -
-g3:包含宏定义等额外信息
4.3 优化级别对比
不同优化级别对比实验:
| 优化级别 | 编译参数 | 代码大小 | 运行速度 | 编译时间 |
|---|---|---|---|---|
| O0 | -O0 | 最大 | 最慢 | 最短 |
| O1 | -O1 | 中等 | 较快 | 中等 |
| O2 | -O2 | 较小 | 快 | 较长 |
| O3 | -O3 | 最小 | 最快 | 最长 |
| Os | -Os | 极小 | 中等 | 中等 |
测试命令:
for level in O0 O1 O2 O3 Os; do
gcc-13 -$level demo.c -o demo_$level
size demo_$level
done
5. 现代编译技术前沿
5.1 链接时优化(LTO)
启用LTO编译:
gcc-13 -flto -O2 demo.c -o demo_lto
LTO工作流程:
- 编译阶段生成GIMPLE中间表示
- 链接阶段进行跨模块优化
- 生成最终机器码
5.2 静态分析集成
使用GCC静态分析器:
gcc-13 -fanalyzer demo.c
可检测的常见问题:
- 内存泄漏
- 空指针解引用
- 数组越界
- 未初始化变量
5.3 交叉编译实战
ARM64交叉编译示例:
aarch64-linux-gnu-gcc-13 -mcpu=cortex-a72 demo.c -o demo_arm
关键参数说明:
-
-march:指定目标架构 -
-mtune:优化特定CPU型号 -
-mfloat-abi:浮点运算约定
6. 性能调优实战案例
6.1 热点函数分析
编译带性能分析信息的代码:
gcc-13 -pg -O2 demo.c -o demo_profile
生成分析报告:
./demo_profile
gprof demo_profile gmon.out > analysis.txt
6.2 向量化优化
检查自动向量化效果:
gcc-13 -O3 -fopt-info-vec demo.c -o demo_vec
手动向量化提示:
// 使用GCC向量扩展
typedef float v4sf __attribute__((vector_size(16)));
6.3 分支预测优化
帮助编译器优化分支:
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
if (unlikely(error_condition)) {
handle_error();
}
7. 安全加固实践
7.1 内存保护机制
启用安全编译选项:
gcc-13 -fstack-protector-strong -D_FORTIFY_SOURCE=2 demo.c -o demo_secure
安全功能说明:
- 栈保护 :检测栈溢出攻击
- 格式化字符串保护 :检查printf系列函数
- 立即绑定 :减少PLT劫持风险
7.2 漏洞缓解技术
现代缓解技术启用:
gcc-13 -fcf-protection=full -fstack-clash-protection demo.c -o demo_hardened
7.3 静态漏洞扫描
使用GCC静态分析:
gcc-13 -fanalyzer -Wformat-security demo.c
常见安全警告选项:
-
-Wformat=2:格式化字符串检查 -
-Wstringop-overflow:缓冲区溢出检测 -
-Warray-bounds:数组边界检查
8. 构建系统集成
8.1 Makefile最佳实践
高效构建模板:
CC = gcc-13
CFLAGS = -O2 -g3 -Wall
LDFLAGS = -flto
SRCS = $(wildcard src/*.c)
OBJS = $(SRCS:.c=.o)
demo: $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f demo $(OBJS)
8.2 CMake集成示例
现代CMake配置:
cmake_minimum_required(VERSION 3.20)
project(Demo LANGUAGES C)
set(CMAKE_C_COMPILER gcc-13)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -flto")
add_executable(demo src/main.c src/math.c)
target_include_directories(demo PRIVATE include)
9. 疑难问题排查指南
9.1 常见错误解析
| 错误类型 | 典型表现 | 解决方案 |
|---|---|---|
| 链接错误 | undefined reference | 检查库路径和链接顺序 |
| 预处理错误 | macro redefined |
使用
-dM
检查宏定义冲突
|
| 优化引发问题 | -O2下行为异常 |
使用
-Og
调试,逐步提高优化
|
| 兼容性问题 | 不同GCC版本行为差异 |
指定
-std=
标准版本
|
9.2 调试技巧汇编
-
预处理问题 :
gcc-13 -E -dD -v demo.c > preprocess.log -
汇编检查 :
gcc-13 -S -fverbose-asm demo.c -
内存布局分析 :
readelf -S demo -
依赖检查 :
gcc-13 -M demo.c
10. 性能分析工具链
10.1 编译耗时分析
使用
time
和
-ftime-report
:
time gcc-13 -O2 -ftime-report demo.c -o demo
10.2 代码大小优化
分析各段大小:
size -A demo
缩减代码尺寸技巧:
-
-Os优化 -
-ffunction-sections -fdata-sections配合链接器--gc-sections -
去除调试信息
strip
10.3 反汇编分析
生成带源码的反汇编:
gcc-13 -g -O2 demo.c -o demo
objdump -d -S demo > disassembly.s
11. 跨平台编译策略
11.1 多架构支持
查看目标支持:
gcc-13 -print-multi-lib
编译32位版本:
gcc-13 -m32 demo.c -o demo32
11.2 特性检测宏
检查CPU特性支持:
#if defined(__AVX2__)
// AVX2指令集优化代码
#endif
11.3 兼容性构建
确保最大兼容性:
gcc-13 -mtune=generic -march=x86-64 -O2 demo.c
12. 编译器内部探索
12.1 中间表示转储
查看GIMPLE表示:
gcc-13 -fdump-tree-gimple demo.c
12.2 优化过程跟踪
观察优化步骤:
gcc-13 -O2 -fdump-tree-optimized demo.c
12.3 插件开发基础
示例插件编译:
gcc-13 -fplugin=./my_plugin.so demo.c
13. 工具链生态整合
13.1 与Clang交互
混合使用工具链:
clang -emit-llvm -S demo.c -o demo.ll
llc -march=x86-64 demo.ll -o demo.s
gcc-13 demo.s -o demo
13.2 静态分析器集成
使用scan-build:
scan-build-13 gcc-13 -O2 demo.c -o demo
13.3 性能剖析工具
perf集成示例:
perf record ./demo
perf report
14. 现代C标准支持
14.1 C17特性应用
启用最新标准:
gcc-13 -std=c17 demo.c
14.2 特性测试宏
安全使用新特性:
#if __has_include(<stdatomic.h>)
#include <stdatomic.h>
#endif
14.3 兼容性考虑
确保向后兼容:
gcc-13 -std=gnu11 -D_DEFAULT_SOURCE demo.c
15. 嵌入式开发特别考量
15.1 裸机编译配置
指定链接脚本:
gcc-13 -T linker.ld -nostdlib demo.c -o demo.elf
15.2 大小优化技巧
关键参数组合:
gcc-13 -Os -ffunction-sections -fdata-sections -Wl,--gc-sections demo.c
15.3 交叉调试支持
生成带调试信息的ELF:
arm-none-eabi-gcc -g -specs=nano.specs demo.c -o demo.elf
16. 编译器行为定制
16.1 自定义优化
特定函数优化级别:
__attribute__((optimize("O3"))) void hot_function() {
// 热点代码
}
16.2 节区控制
指定变量存储位置:
__attribute__((section(".mysection"))) int my_var;
16.3 内联策略
控制内联行为:
gcc-13 --param max-inline-insns-auto=100 demo.c
17. 性能关键型代码优化
17.1 循环优化
检查向量化报告:
gcc-13 -O3 -fopt-info-vec-missed demo.c
17.2 分支预测
使用likely/unlikely:
if (__builtin_expect(ptr != NULL, 1)) {
// 大概率路径
}
17.3 内存访问优化
强制对齐:
__attribute__((aligned(64))) float array[1024];
18. 安全编程实践
18.1 缓冲区保护
安全字符串函数:
#define _GNU_SOURCE
#include <string.h>
char buf[100];
strlcpy(buf, src, sizeof(buf));
18.2 整数溢出防护
安全算术运算:
#include <stdckdint.h>
if (ckd_add(&result, a, b)) {
// 处理溢出
}
18.3 静态分析集成
编译时检查:
gcc-13 -Wformat -Wformat-security demo.c
19. 调试技巧进阶
19.1 核心转储分析
生成和分析核心转储:
ulimit -c unlimited
./demo
gdb ./demo core
19.2 反向调试
使用rr工具:
rr record ./demo
rr replay
19.3 内存错误检测
AddressSanitizer集成:
gcc-13 -fsanitize=address -g demo.c -o demo_asan
20. 构建系统高级话题
20.1 增量构建优化
CCache配置:
export CCACHE_PREFIX="distcc"
export CC="ccache gcc-13"
20.2 分布式编译
使用distcc:
distcc gcc-13 -O2 demo.c -o demo
20.3 构建缓存
sccache集成:
export RUSTC_WRAPPER=sccache
21. 编译器开发前瞻
21.1 GCC最新特性
13.2版本亮点:
- 改进的静态分析器
- 增强的C2X支持
- 新的优化passes
21.2 插件系统
示例插件开发:
#include <gcc-plugin.h>
// 插件实现代码...
21.3 自定义pass
开发流程:
- 获取GCC源码
- 在gcc/passes.c注册新pass
- 实现优化逻辑
22. 行业应用案例
22.1 高频交易系统
关键编译参数:
gcc-13 -O3 -march=native -flto -fno-exceptions -fno-rtti trade.c
22.2 嵌入式实时系统
实时性保障配置:
gcc-13 -Os -fno-common -fno-short-enums -mthumb -mcpu=cortex-m4 firmware.c
22.3 科学计算应用
数值计算优化:
gcc-13 -O3 -mavx2 -mfma -ffast-math simulation.c
23. 工具链深度集成
23.1 与GDB协作
优化调试体验:
gcc-13 -g3 -Og -fvar-tracking demo.c -o demo
23.2 性能剖析支持
生成剖析信息:
gcc-13 -pg -O2 demo.c -o demo_profile
23.3 覆盖率分析
生成覆盖率数据:
gcc-13 -fprofile-arcs -ftest-coverage demo.c -o demo_coverage
24. 编译原理实践
24.1 词法分析观察
生成lexer输出:
gcc-13 -dD -E -P demo.c > demo.lex
24.2 语法树可视化
生成AST图形:
gcc-13 -fdump-tree-original-graph demo.c
24.3 中间码优化
观察GIMPLE变化:
gcc-13 -O2 -fdump-tree-optimized demo.c
25. 持续集成集成
25.1 自动化构建
典型CI脚本:
#!/bin/bash
set -e
export CC=gcc-13
export CFLAGS="-Wall -Werror -O2"
mkdir -p build && cd build
cmake ..
make -j$(nproc)
ctest --output-on-failure
25.2 静态分析流水线
集成scan-build:
scan-build-13 --status-bugs make
25.3 性能基准测试
编译期性能检测:
time gcc-13 -O2 -ftime-report demo.c -o demo
26. 跨语言交互
26.1 C与汇编混合
内联汇编示例:
asm volatile ("movl %%eax, %0" : "=r"(result));
26.2 C++互操作
extern "C"用法:
extern "C" {
#include "c_lib.h"
}
26.3 Rust FFI
C兼容接口:
#[no_mangle]
pub extern "C" fn rust_function() -> i32 {
42
}
27. 安全编译基准
27.1 硬化检查清单
安全编译选项:
gcc-13 -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fPIE -pie -Wformat=2
27.2 认证合规
MISRA-C检查:
gcc-13 -fplugin=/path/to/misra_plugin.so demo.c
27.3 漏洞模式识别
常见危险模式:
- 未检查的用户输入
- 不安全的字符串操作
- 整数溢出风险
28. 编译器性能调优
28.1 并行编译优化
多核利用:
gcc-13 -flto=auto -O2 -pipe -march=native -j$(nproc) demo.c
28.2 内存使用控制
限制资源:
ulimit -v 4000000
gcc-13 -O3 large_project.c
28.3 缓存友好构建
优化构建顺序:
gcc-13 -frepo -O2 demo.c
29. 调试信息管理
29.1 分离调试信息
生成独立调试文件:
objcopy --only-keep-debug demo demo.debug
strip --strip-debug --strip-unneeded demo
29.2 压缩调试信息
减小体积:
gcc-13 -g -gz=zlib demo.c -o demo
29.3 调试信息级别
控制详细程度:
gcc-13 -g1 demo.c -o demo_minimal
gcc-13 -g3 demo.c -o demo_full
30. 编译器内部机制
30.1 前端处理流程
词法分析 → 语法分析 → 语义分析
30.2 中间表示转换
AST → GENERIC → GIMPLE → RTL
30.3 后端代码生成
指令选择 → 寄存器分配 → 指令调度
31. 优化技术深度
31.1 循环优化技术
- 循环展开
- 循环向量化
- 循环分块
31.2 内联策略
成本模型分析:
gcc-13 -O2 -fopt-info-inline demo.c
31.3 链接时优化
全程序分析优势:
- 跨模块常量传播
- 冗余代码消除
- 更精确的过程间分析
32. 异常处理机制
32.1 C++异常开销
分析异常成本:
gcc-13 -fno-exceptions -DNO_EXCEPTIONS benchmark.cpp
32.2 安全异常处理
资源清理保障:
__attribute__((cleanup)) void guard_func(void* arg) {
// 资源释放代码
}
32.3 错误返回优化
错误码模式:
typedef struct {
int value;
int error;
} result_t;
result_t safe_operation() {
// 实现
}
33. 模板元编程支持
33.1 C++模板实例化
观察实例化过程:
gcc-13 -fdump-tree-original -O2 template.cpp
33.2 编译期计算
constexpr应用:
constexpr int factorial(int n) {
return n <= 1 ? 1 : n * factorial(n-1);
}
33.3 概念约束
C++20概念检查:
template<typename T>
concept Numeric = std::is_arithmetic_v<T>;
34. 多线程编程支持
34.1 内存模型保障
原子操作支持:
#include <stdatomic.h>
atomic_int counter = ATOMIC_VAR_INIT(0);
34.2 线程局部存储
TLS使用:
__thread int thread_specific_var;
34.3 同步原语优化
高效自旋锁:
typedef atomic_int spinlock_t;
#define SPIN_INIT() 0
#define SPIN_LOCK(l) while(atomic_exchange(l, 1)) {}
#define SPIN_UNLOCK(l) atomic_store(l, 0)
35. 向量化编程实践
35.1 自动向量化
检查向量化报告:
gcc-13 -O3 -fopt-info-vec demo.c
35.2 手动向量化
使用向量扩展:
typedef float v4sf __attribute__((vector_size(16)));
v4sf a = {1.0f, 2.0f, 3.0f, 4.0f};
v4sf b = a + a;
35.3 SIMD指令优化
特定指令集使用:
#include <immintrin.h>
__m256d va = _mm256_load_pd(a);
__m256d vb = _mm256_load_pd(b);
__m256d vc = _mm256_add_pd(va, vb);
36. 浮点运算控制
36.1 精度控制
严格浮点模型:
gcc-13 -O2 -ffloat-store demo.c
36.2 快速数学
放宽精度要求:
gcc-13 -O2 -ffast-math demo.c
36.3 异常处理
浮点异常检查:
gcc-13 -fnon-call-exceptions demo.c
37. 嵌入式特定优化
37.1 空间优化
节区压缩:
gcc-13 -Os -ffunction-sections -fdata-sections demo.c
37.2 延迟敏感代码
优化中断处理:
__attribute__((interrupt)) void isr() {
// 关键中断代码
}
37.3 低功耗模式
电源管理提示:
__attribute__((optimize("Os"))) void low_power_func() {
// 低功耗代码
}
38. 调试符号高级用法
38.1 条件调试
选择性调试信息:
gcc-13 -g -feliminate-unused-debug-symbols demo.c
38.2 符号压缩
减小调试大小:
gcc-13 -g -fdebug-prefix-map=$(pwd)=. demo.c
38.3 源码映射
容器内调试支持:
gcc-13 -g -fdebug-prefix-map=/build=/usr/src demo.c
39. 编译器扩展应用
39.1 属性语法
函数属性示例:
__attribute__((always_inline)) void critical_func() {
// 强制内联函数
}
39.2 内置函数
编译器内置函数:
int leading_zeros = __builtin_clz(x);
39.3 向量扩展
SIMD向量类型:
typedef int v4si __attribute__((vector_size(16)));
40. 构建时代码生成
40.1 编译时计算
常量表达式:
#define ARRAY_SIZE (sizeof(data)/sizeof(data[0]))
40.2 X宏技术
减少重复代码:
#define LIST_OF_VARS \
X(int, count) \
X(float, total)
#define X(type, name) type name;
LIST_OF_VARS
#undef X
40.3 代码生成器
集成构建流程:
%.c: %.gen
generator $< > $@
41. 安全编码强制
41.1 静态断言
编译时检查:
_Static_assert(sizeof(int) == 4, "int must be 4 bytes");
41.2 边界检查
数组安全访问:
#define SAFE_ACCESS(arr, idx) \
((idx) < sizeof(arr)/sizeof(arr[0]) ? arr[idx] : (abort(),0))
41.3 类型安全
强类型定义:
typedef struct { int value; } meter_t;
typedef struct { int value; } second_t;
42. 性能分析集成
42.1 时间测量
高精度计时:
#include <time.h>
struct timespec start, end;
clock_gettime(CLOCK_MONOTONIC, &start);
// 被测代码
clock_gettime(CLOCK_MONOTONIC, &end);
42.2 性能计数器
硬件事件采样:
perf stat -e cycles,instructions,cache-references ./demo
42.3 代码热图
识别热点:
perf record -g ./demo
perf report -g 'graph,0.5,caller'
43. 异常处理优化
43.1 零成本异常
C++异常开销分析:
gcc-13 -fno-exceptions -DNO_EXCEPTIONS benchmark.cpp
43.2 错误码模式
高效错误传递:
typedef struct {
int value;
int error;
} result_t;
43.3 资源安全
RAII风格管理:
__attribute__((cleanup)) void guard(void* p) {
free(*(void**)p);
}
#define AUTO_FREE __attribute__((cleanup(guard))) void*
44. 内存管理进阶
44.1 自定义分配器
内存池实现:
typedef struct {
char* pool;
size_t pos;
} mem_pool;
void* pool_alloc(mem_pool* p, size_t size) {
void* ptr = p->pool + p->pos;
p->pos += size;
return ptr;
}
44.2 安全释放模式
双重释放防护:
#define SAFE_FREE(p) do { free(p); (p) = NULL; } while(0)
44.3 内存布局控制
结构体打包:
struct __attribute__((packed)) sensor_data {
uint8_t id;
uint32_t value;
};
45. 多平台兼容技巧
45.1 字节序处理
安全转换函数:
#include <endian.h>
uint32_t net_order = htobe32(host_order);
45.2 对齐要求
跨平台对齐:
#include <stdalign.h>
alignas(64) char cache_line[64];
45.3 特性检测
条件编译:
#if defined(__GNUC__) && __GNUC__ >= 5
// GCC特有特性
#endif
46. 编译器诊断增强
46.1 静态检查
强化警告:
gcc-13 -Wall -Wextra -Wpedantic demo.c
46.2 错误预防
可能错误检测:
__attribute__((warn_unused_result)) int critical_op();
46.3 代码风格
格式化提示:
__attribute__((format(printf, 1, 2)))
void log_message(const char* fmt, ...);
47. 链接脚本魔法
47.1 内存布局控制
自定义段分配:
MEMORY {
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
}
SECTIONS {
.text : { *(.text*) } > FLASH
.data : { *(.data*) } > RAM AT> FLASH
}
47.2 变量定位
绝对地址变量:
extern uint32_t __stack_top[];
__attribute__((section(".stack")))
uint32_t stack[1024] = { (uint32_t)__stack_top };
47.3 启动代码
自定义初始化:
.section .init
.global _start
_start:
ldr sp, =__stack_top
bl main
48. 调试信息优化
48.1 最小调试
基础调试信息:
gcc-13 -g1 demo.c -o demo
48.2 符号压缩
减小调试大小:
gcc-13 -g -fdebug-prefix-map=$(pwd)=. demo.c
48.3 源码映射
容器调试支持:
gcc-13 -g -fdebug-prefix-map=/build=/usr/src demo.c
49. 构建缓存技术
49.1 ccache配置
加速重复构建:
export CCACHE_DIR="/tmp/ccache"
export CC="ccache gcc-13"
49.2 分布式编译
使用distcc:
export DISTCC_HOSTS="localhost host2 host3"
make -j$(distcc -j)
49.3 预编译头
加速编译:
gcc-13 -xc-header stdafx.h -o stdafx.h.gch
50. 编译器内部探索
50.1 中间表示转储
查看GIMPLE:
gcc-13 -fdump-tree-gimple demo.c
50.2 优化过程跟踪
观察pass应用:
gcc-13 -O2 -fdump-tree-optimized demo.c
50.3 汇编输出
生成带注释汇编:
gcc-13 -S -fverbose-asm demo.c



357

被折叠的 条评论
为什么被折叠?



