gcc -g vs不是-g和strip与不带,性能和内存使用情况?

如果二进制文件大小不是问题,那么使用-g而不是在脱离性能的关键环境中运行二进制文件会有什么缺点? 我有很多的磁盘空间,但二进制是密集的CPU,并使用大量的内存。 该二进制文件被加载一次,并活着几个小时。

编辑:

我想使用带有debugging信息的二进制文件的原因是在发生分段错误时生成有用的核心转储文件。

ELF加载器加载 ,而不是 ; 段之间的映射由用于构build可执行文件的链接器脚本确定。

默认链接器脚本不会将debugging部分映射到任何段,因此省略。

符号信息有两种forms:静态符号是带外处理的,从不作为节数据存储; dynamic符号表由链接器生成,并添加到与可执行文件一起加载的特殊段中,因为它需要dynamic链接器访问。 strip命令只能删除静态符号,而这些静态符号在一个段中永远不会被引用。

因此,您可以在整个过程中使用完整的debugging信息,这不会影响RAM中可执行映像的大小,因为它没有加载。 这也意味着信息不包含在核心转储中,所以在这里也没有任何好处。

objcopy实用程序有一个特殊的选项,只复制debugging信息,所以你可以生成第二个包含这个信息的ELF文件,并使用剥离的二进制文件; 分析核心转储时,可以将这两个文件加载到debugging器中:

 objcopy --only-keep-debug myprogram myprogram.debug strip myprogram