- 论坛徽章:
- 9
|
本帖最后由 Tinnal 于 2010-10-11 19:51 编辑
回复 1# xisacihong
查阅了一下gprof的代码(gprof的代码在编译器的工具链的原码中),并没有inf,或nan字符串的出现,证明这是一个gprof都不可预料的错误。google和baidu了一下inf和nan得到如下结果:
进行浮点数编程时,如果没有注意,常常会出现输出类似 1.#IND, 1.#INF 或者 nan, inf 之类奇怪的输出。这通常隐含了浮点数操作的异常。
特殊浮点数的含义
1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果用 0 除一个负整数也会得到 -1.#INF / -inf 值。
-1.#IND / nan:这个的情况更复杂,一般来说,它们来自于任何未定义结果(非法)的浮点数运算。"IND"是 indeterminate 的缩写,而"nan"是 not a number 的缩写。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞ 等。
可以推测gprof在内部运算是出错。
分析最有可能原因为:
因为-pg是一个编译选项,编译器要跟据pg选项生成特定测量代码,这部份代码在程序运行时收集数据,并在程序退出时写盘,以备gprof程序分析。gprof本来就是编译器的一部份,而你采用arm的编译器生成程序,却用主机的gprof来解释数据。数据的格式可能不一致,导致PC版本的gprof解释出错。
建议你用回交叉编器器带的gprof进行分析。 |
|