Gcc 理解g++;编译标志

Gcc 理解g++;编译标志,gcc,g++,Gcc,G++,我想知道每个标志对代码的作用,以了解其开销。我查过了 mang++用于'-g'标志 并且只找到了“生成额外代码以写入配置文件…”“ 它没有指明在哪里 他们有没有详细的手册来帮助我理解-g/-p的作用?生成额外的代码来编写概要文件”是-p选项,它将添加额外的代码。额外代码的范围至少是一个寄存器加载和函数开始和结束时的一个函数调用,但这取决于体系结构。这反过来可能会影响编译期间的其他优化,例如寄存器的可用性、内联以及实际运行代码时,它可能会影响缓存命中率/未命中率,除了执行这些额外指令的直接影响之外

我想知道每个标志对代码的作用,以了解其开销。我查过了

mang++
用于
'-g'
标志

并且只找到了“生成额外代码以写入配置文件…”“

它没有指明在哪里

他们有没有详细的手册来帮助我理解-g/-p的作用?

生成额外的代码来编写概要文件”是
-p
选项,它将添加额外的代码。额外代码的范围至少是一个寄存器加载和函数开始和结束时的一个函数调用,但这取决于体系结构。这反过来可能会影响编译期间的其他优化,例如寄存器的可用性、内联以及实际运行代码时,它可能会影响缓存命中率/未命中率,除了执行这些额外指令的直接影响之外

-g
选项本身并不添加额外的代码,它只是生成调试符号,这些符号成为可执行文件的一部分,以便调试器在使用调试器时能够找出函数、变量等的位置


问题是他们提供了这样一句话:“生成额外的代码来编写适合于分析程序的概要信息,教授”正在提供关于“什么类型的信息适合于分析”的信息

它是从你那里抽象出来的,因为你不需要知道


如果您不这么认为,请检查编译器的源代码。

这是一个有趣的问题,如果您的起点是gcc手册页,那么要找到相关信息就有点困难:-),接下来就是

基本上,
-g
标志将额外的“调试”信息直接写入生成的目标文件(.o)和可执行文件中。然后,调试器(比如gdb)可以使用这些额外信息来帮助了解调试人员的工作情况

例如,如果您有一个变量名,它将作为额外信息保留,这样当您使用调试器时,您可以引用您在源代码中使用的变量,而不是一些随机内存地址,因为没有符号调试信息

对调试选项进行了一些解释

不过,我认为您需要一个调试介绍。所以请看 为了更好地了解正在发生的事情

分析数据也是如此。
-p
在可执行文件中添加了额外的信息,以便像
prof
这样的分析程序可以在软件运行时跟踪软件,并告诉您它在哪里花费了大部分时间(什么循环/函数等)以及程序的效率。:-)

相关阅读内容
文件中的符号信息与调试信息之间存在差异。一旦开始查看链接,您将运行符号解析。

请稍候,节省带宽。
info gcc
也应该有帮助。问题是他们提供了以下语句:生成额外代码,以编写适用于分析程序的配置文件信息。prof“Non正在提供关于”哪种类型的信息适用于分析“可能与+1重复:具体示例,请注意,这绝不是一个死证书。感谢您提供的信息性答案。那么,我可以安全地假设执行时间会随着代码中函数数量的增加而增加吗?或者它也会随着其他参数的增加而增加?如果你有一些当前使用的代码,比如说3个函数都是按主函数1M次的顺序调用的,然后你将代码重构成8个函数,所有这些函数都被调用1M次,是的。如果您有更多的函数,但它们没有被调用那么多次,那么不一定。每次调用函数时,都会调用“统计计数”函数—开销的多少在很大程度上取决于函数的功能以及调用次数。感谢您的介绍指南:)