代码之家  ›  专栏  ›  技术社区  ›  Richard Corden

什么是函数“tcf”0?(使用gprof和g++时看到)

  •  7
  • Richard Corden  · 技术社区  · 16 年前

    我们使用了G++4.2.4,我正试图跟踪我的代码中的一些性能问题。

    我运行gprof来生成配置文件,我得到了以下“奇怪之处”,因为最昂贵的功能是u tcf_0:

    Each sample counts as 0.01 seconds.
     %   cumulative   self              self     total           
    time   seconds   seconds    calls  ms/call  ms/call  name    
    40.00      0.04     0.04        1    40.00    95.00  __tcf_0
    

    然后,这个函数似乎调用了我的大部分用户函数(即,它是从main调用的函数)。我找到的最接近的解释是 here 但是这个链接引用了静态对象和不退出,我认为这在我的例子中不适用。

    如果有用的话,我使用的是Boost(程序选项和融合)和HDF5库。

    更新:

    我在构建时使用的命令是:

    g++  -Wreturn-type -Wunused -Winline -pg  -DLINUX -DHAS_SETENV \
        -DFUSION_MAX_MAP_SIZE=15 -DFUSION_MAX_VECTOR_SIZE=15  -g -O0 \
        --param large-function-growth=300 --param inline-unit-growth=200
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   Cyrille Ka    16 年前

    _ tcf_0似乎确实是一个函数,它调用静态对象的析构函数,并为每个静态对象注册,在退出时调用(在 this page )

    现在,gprof的结果很奇怪,因为大部分时间所用的函数只需要0.04秒,这意味着整个程序需要0.1秒来执行。如果我没弄错的话,我猜你的资料不正确。编译代码时启用了分析功能吗?

        2
  •  5
  •   deft_code    15 年前

    G++生成具有此名称的函数。它们调用静态对象的析构函数,并在调用构造函数时用atexit()注册。

    推荐文章