我想知道每个标志对代码的作用以了解其开销。我检查了
man g++
为'-g'
国旗
只发现"Generate extra code to write profile...."
没有具体说明在哪里?
他们是否有任何详细的手册可以帮助我理解 -g/-p 的作用?
“生成额外的代码来编写配置文件”是-p
选项,这将添加额外的代码。该额外代码的范围至少是一个寄存器加载和一个函数在函数开始和结束时调用,但它确实取决于架构。这可能反过来影响编译期间的其他优化,例如寄存器的可用性、内联和实际运行代码时,它可能会影响缓存命中率/未命中率,除了执行这些额外指令的直接影响。
该-g
选项本身不会添加额外的代码,它只是生成成为可执行文件一部分的调试符号,以便调试器可以在您使用调试器时确定函数、变量等的位置。
有趣的问题,如果您的起点是 gcc 手册页,则很难找到信息 :-) 所以就到这里。
基本上,该-g
标志将额外的“调试”信息直接写入生成的目标文件 (.o) 和可执行文件中。然后,调试器(例如 gdb)可以使用这些额外信息来帮助了解进行调试的人正在发生的事情。
因此,例如,如果您有一个变量名称,它将作为额外信息保留,这样当您使用调试器时,您可以引用您在源代码中使用的变量,而不是一些随机内存地址,因为符号调试信息不是那里。
调试选项在此处的 gcc 手册中有所解释
但是我认为你需要一个调试介绍。因此,请查看UWA 的 GDB 介绍, 以更好地了解正在发生的事情。
分析数据也是如此。-p
在可执行文件中添加额外信息,以便像分析器这样的分析器prof
可以在软件运行时跟踪软件,并告诉您它大部分时间花在哪里(哪些循环/函数等)以及程序的效率如何(低)。:-)
文件中的符号信息和调试信息是有区别的。一旦您开始查看链接,您就会遇到符号解析。
问题是他们提供了这样的声明:“生成额外的代码来编写适合分析程序教授的配置文件信息”非提供有关“什么类型的信息适合分析”的信息。
它从你身上抽象出来,因为你不需要知道。
如果您不这么认为,请检查编译器的源代码。