我试图使用valgrind - callgrind工具来描述某些可执行文件.我已经使用创建了带注释的输出callgrind_annotate --auto=yes.创建的输出告诉我有关Ir计数的信息,根据我的理解,这是特定指令被调用的次数,但我想知道代码的哪一部分在执行时花费了最多的时间.
我怎么知道呢?
在我的应用程序中,我想找到花费更多时间的部分......可能有些情况下某些函数被称为比其他函数更多的时间..但是被称为更少时间的函数花费的时间比其他
是
--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++ 并发实践》。我对下面的代码片段有以下疑问。
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 函数完成时该对象超出范围,但我无法理解如何以作者提到的方式避免它。