Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将-rdynamic链接器选项添加到gcc/g++;影响性能?_Linux_Gcc_G++ - Fatal编程技术网

Linux 将-rdynamic链接器选项添加到gcc/g++;影响性能?

Linux 将-rdynamic链接器选项添加到gcc/g++;影响性能?,linux,gcc,g++,Linux,Gcc,G++,我想在应用程序崩溃时获取堆栈跟踪。我知道-rdynamic选项可以使用函数名获得完整的堆栈跟踪。但我担心这是否会对我的应用程序的性能产生任何影响 是的,有,尽管它非常具体,通常不引起关注 -rdynamic选项指示链接器将运行时通常不需要的符号添加到符号表中。这意味着动态链接器需要在运行时清除更多(可能更多)符号以进行符号解析 具体地说,由于基于GNU的系统中的符号表查找是使用哈希实现的,因此拥有更多符号会增加哈希冲突的可能性。由于哈希表中所有冲突的符号都位于一个列表中,因此运行时链接器需要遍历

我想在应用程序崩溃时获取堆栈跟踪。我知道-rdynamic选项可以使用函数名获得完整的堆栈跟踪。但我担心这是否会对我的应用程序的性能产生任何影响

是的,有,尽管它非常具体,通常不引起关注

-rdynamic选项指示链接器将运行时通常不需要的符号添加到符号表中。这意味着动态链接器需要在运行时清除更多(可能更多)符号以进行符号解析

具体地说,由于基于GNU的系统中的符号表查找是使用哈希实现的,因此拥有更多符号会增加哈希冲突的可能性。由于哈希表中所有冲突的符号都位于一个列表中,因此运行时链接器需要遍历该列表,并使用memcmp比较每个符号名。有更多的符号在散列中发生冲突意味着有更长的列表,因此解析每个动态符号需要更多的时间

这种情况在C++和C上稍微差一些,因为类名有很多相同的前缀符号名称。

实际上,这只会在第一次使用符号时生效,因此,除非您的应用程序非常大且包含大量符号,否则不会感觉到

在应用程序如此庞大的罕见情况下,可以使用类似的技巧来克服开销