小编Aja*_*jay的帖子

Valgrind - callgrind Profiler:如何知道哪个功能花费更多时间

我试图使用valgrind - callgrind工具来描述某些可执行文件.我已经使用创建了带注释的输出callgrind_annotate --auto=yes.创建的输出告诉我有关Ir计数的信息,根据我的理解,这是特定指令被调用的次数,但我想知道代码的哪一部分在执行时花费了最多的时间.

我怎么知道呢?

在我的应用程序中,我想找到花费更多时间的部分......可能有些情况下某些函数被称为比其他函数更多的时间..但是被称为更少时间的函数花费的时间比其他

c++ valgrind callgrind

7
推荐指数
1
解决办法
1271
查看次数

你可以在c中的同一个语句中的同一个变量上有一个递增器和一个递减器

--foo++;
Run Code Online (Sandbox Code Playgroud)

C中的有效声明?(它会编译/运行)是否有任何实际应用?

很抱歉在编辑中更改了问题,但我发现了一些问题.

根据我的C++编译器(Visual Studio 2010):

--++foo;
Run Code Online (Sandbox Code Playgroud)

是一个有效的命令,但

foo--++; 
Run Code Online (Sandbox Code Playgroud)

不是.这有什么理由吗?

c c++ pre-increment post-increment

1
推荐指数
1
解决办法
329
查看次数

如何使 Thread 函数自包含

我正在阅读《C++ 并发实践》。我对下面的代码片段有以下疑问。

struct func
{
   int& i;
   func(int& i_):i(i_){}
   void operator()()
   {
       for(unsigned j=0;j<1000000;++j)
       {
           do_something(i); //Can have issue of dangling references
       }
   }
};

void oops()
{
    int some_local_state=0;
    func my_func(some_local_state);
    std::thread my_thread(my_func); 
    my_thread.detach();
}
Run Code Online (Sandbox Code Playgroud)

作者说,为了避免这种情况,一种方法是 使线程函数自包含,并将数据复制到线程中,而不是共享数据

我确实理解这个问题是因为创建的函数对象是 oop 函数的本地函数,并且当 oops 函数完成时该对象超出范围,但我无法理解如何以作者提到的方式避免它。

c++ multithreading

0
推荐指数
1
解决办法
267
查看次数