在c中,我们可以通过启用标志-O来启用所有可能的优化来启用优化设置,-O0将禁用所有已启用的优化。
我的问题是这个标志是对谁的消息?对编译器或内核意味着什么?
答案 0 :(得分:1)
您提供的所有命令行参数都由编译器(或编译器驱动程序,如某些编译器(如gcc))解释。然后可以将它们传递给编译器(或编译器驱动程序)执行的其他程序以完成特定任务。
顺便说一下,-o
不是具有相当多编译器的优化设置。它通常指定输出文件的名称。例如,gcc -c file.c -o anotherfile.o
编译器file.c
并生成一个名为anotherfile.o
的目标文件。
优化设置通常为-O
(例如-O3
)。请注意大写O
。它不一定会被传递给编译器/驱动程序执行的每个程序。例如,gcc -O3 file.c -o program
使用优化设置file.c
编译-O3
并生成名为program
的输出可执行文件。为此,调用链接器,以及各种编译阶段(预处理器,编译器本身等)。 -O3
通常不会传递给链接器 - 它是一个编译选项,链接器通常不理解。
答案 1 :(得分:-1)
O
标志传递给编译器,而不是内核。内核与编译无关。这些标志决定了优化器将如何积极地完成它的工作。一个实际的例子是clang -O3 WannabeObjectFile.c
。
编辑:我犯了一个错误,小写o
标志用于指定输出文件。大写O
用于指定优化级别。