4

Windows で cygwin を実行しており、コードのプロファイリングに gprof の最新バージョンを使用しています。私の問題は、コード内の各関数に対してフラット プロファイルがゼロ秒を示していることです。関数をループしようとしましたが (for ループを 100 万回試行しました)、gprof はいつでも累積できません。助けてください。これが私のサンプル関数の1つです。

bool is_adjacent(const char* a ,const char* b)
{
  for(long long iter=0;iter<=1000000;iter++){
  string line1="qwertyuiop";
  string line2="asdfghjkl";
  string line3="zxcvbnm";
  string line4="1234567890";
  int pos=line1.find(*a);
  if(pos!=string::npos){
    if ((line1[pos++]==*b)||((pos!=0)&&(line1[pos--]==*b)))
      return true;
    else return false;}
  pos=line2.find(*a);  
  if(pos!=string::npos){
    if ((line2[pos++]==*b)||((pos!=0)&&(line2[pos--]==*b)))
      return true;
    else return false;}
  pos=line3.find(*a);  
  if(pos!=string::npos){
    if ((line3[pos++]==*b)||((pos!=0)&&(line3[pos--]==*b)))
      return true;
    else return false;}
  pos=line4.find(*a);  
  if(pos!=string::npos){
    if ((line4[pos++]==*b)||((pos!=0)&&(line4[pos--]==*b)))
      return true;
    else return false;}
  }
} 
4

3 に答える 3

1

私は時々その問題を抱えています。特に。非常にスレッド化されたコードで。

valgrind を --callgrind オプション (ツール) と共に使用すると、少なくとも関数呼び出しごとの時間をより詳細に表示できます。kcachegrind と呼ばれる出力 (および eswp.callgraph) を視覚化するための kde ツールもあります。ただし、それを cygwin にインストールできるかどうかはわかりません。

于 2009-09-02T16:27:00.680 に答える
0

どのバージョンの gprof を使用していますか? 一部の古いバージョンには、この正確なバグがあります。

gprof --version を実行して結果を教えてください。

于 2009-08-24T09:18:37.163 に答える