为什么 gprof 告诉我一个只从 main() 调用一次的函数被调用了 102 次?
我是一名初学者,为了好玩而编写了以下程序,用于搜索目录并将每个出现的单词替换为另一个单词。我调用了 crt_ls_file() 函数一次,而且只调用了一次,但 gprof 告诉我它被调用了 102 次。我想知道是否有人知道这是为什么。我已经尝试过编译该程序,并且没有进行任何优化。
#include <iostream>
#include <string>
#include <cstdlib>
#include <cassert>
#include <fstream>
using namespace std;
void crt_ls_file(const string& output_f, const string& dir);
void sed(const string& old_string, const string& new_string, const string& filename, const string& directory);
int main(int argc, char* argv[]){
string out_f;
if (argc <= 1) {
cout << "Usage: " << argv[0] << " <Filename>" << endl;
exit(EXIT_FAILURE);
} else {
out_f = ".sandr";
crt_ls_file(out_f, string(argv[1]) );
}
ifstream out_fs( out_f.c_str() );
string line;
getline(out_fs, line);
while( !out_fs.eof() ){
sed(string("index_SYMBOL"), string("index1_SYMBOL"), line, string(argv[1]) );
getline(out_fs, line);
}
out_fs.close();
string f( "rm " + out_f );
system ( f.c_str() );
exit(EXIT_SUCCESS);
}
void crt_ls_file(const string& s, const string& a){
ofstream ls( s.c_str() );
ls.close();
string ls_output( "ls -1 " + a + " > ./" + string(s) );
system( ls_output.c_str() );
}
void sed(const string& o, const string& n, const string& f, const string& d){
ofstream dummy(".temp");
dummy.close();
string sed_output( "sed 's/" + o + "/" + n + "/g' " + d + "/" + f + " > .temp" );
system( sed_output.c_str() );
string rp( "mv .temp " + d + "/" + f );
system ( rp.c_str() );
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我的系统上,
gprof
仅显示对crt_ls_file
的一次调用,因为它应该是这样的:所以看来您
gprof
在撒谎,有时确实如此。如果您确实想分析该程序(几乎没有用),请尝试使用 callgrind 和 kcachegrind。它们是更好、更不那么神秘的工具:On my system
gprof
shows only one call tocrt_ls_file
as it should be:So it seems you
gprof
is lying, which it sometimes does. If you really want to profile this program (there's little use), try callgrind and kcachegrind instead. They're much better and less arcane tools: