Discrepancy between gprof and (unix) time; gprof reports lower runtimes

This question already has an answer here: Time Sampling Problems with gprof 1 answer gprof doesn't know about functions it doesn't have debug info access to, ie the standard library. If you want to get accurate elapsed time and still get a callgraph you can use perf . As an example I wrote a program that loops 10000 times. In this loop, I fill a vector with random values and then

gprof和(unix)时间之间的差异; gprof报告运行时间较短

这个问题在这里已经有了答案: 时间抽样问题与gprof 1答案 gprof不知道它没有调试信息访问的功能,即标准库。 如果你想得到准确的经过时间,仍然可以得到一个callgraph,你可以使用perf 。 作为一个例子,我编写了一个循环10000次的程序。 在这个循环中,我用随机值填充一个向量然后对其进行排序。 对于gprof ,我执行以下步骤: g++ -std=c++11 -O2 -pg -g ./a.out gprof -b ./a.out 如果gmon.out不存在,则创建gmon

Using gprof with sockets

I have a program I want to profile with gprof. The problem (seemingly) is that it uses sockets. So I get things like this: ::select(): Interrupted system call I hit this problem a while back, gave up, and moved on. But I would really like to be able to profile my code, using gprof if possible. What can I do? Is there a gprof option I'm missing? A socket option? Is gprof totally usele

使用gprof与套接字

我有一个我想用gprof进行配置的程序。 问题(表面上)是它使用套接字。 所以我得到这样的东西: ::select(): Interrupted system call 我一会儿回到这个问题,放弃了,然后继续前进。 但我真的很想能够剖析我的代码,如果可能,请使用gprof。 我能做什么? 有没有我错过的gprof选项? 套接字选项? 在这些类型的系统调用中gprof是完全无用的吗? 如果是这样,是否有一个可行的选择? 编辑:平台: Linux 2.6(x64

C++ threading in linux

I'm trying to create a multi-threaded c++ program in Linux. I've used the pthreads library before on windows, but I've heard it's not standard with Linux. What threading library would you advise for c++ with Linux? What options are there, what's the most common, and what's usually the fastest? Thanks! edit: I was mistaken about pthreads not being native to linux, as

Linux中的C ++线程

我试图在Linux中创建一个多线程的c ++程序。 我之前在windows上使用过pthreads库,但是我听说它不是Linux的标准。 你会为Linux提供c ++的线程库吗? 有哪些选择,哪些是最常见的,哪些是最快的? 谢谢! 编辑:我误解了pthreads不是Linux本地的,正如我所说的,这是我之前听到的。 我主要是在寻找各种线程选项的效率之间的比较,并且对c-11线程库如何执行与我之前使用的pthreads有关的信息特别好奇。 我被误导了,我发布

Profiling C++ multi

Have you used any profiling tool like Intel Vtune analyzer? What are your recommendations for a C++ multi threaded application on Linux and windows? I am primarily interested in cache misses, memory usage, memory leaks and CPU usage. I use valgrind (only on UNIX), but mainly for finding memory errors and leaks. Following are the good tools for multithreaded applications. You can try evalu

剖析C ++ multi

你有没有使用任何分析工具,如英特尔Vtune分析仪? 您对Linux和Windows上的C ++多线程应用程序有何建议? 我主要关心缓存未命中,内存使用情况,内存泄漏和CPU使用情况。 我使用valgrind(仅在UNIX上),但主要用于查找内存错误和泄漏。 以下是多线程应用程序的好工具。 您可以尝试评估副本。 运行时间健全检查工具 线程检查器 - 英特尔线程检查器/ VTune,在这里 内存一致性检查工具(内存使用情况,内存泄漏) -

Why does C++11's lambda require "mutable" keyword for capture

Short example: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "n"; // "10" } The question: Why do we need the mutable keyword? It's quite different from tradi

为什么C ++ 11的lambda需要“可变”关键字来捕获

简短例子: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "n"; // "10" } 问题:为什么我们需要mutable关键字? 它与传统参数传递给命名函数完全不同。 背后的理由是什

What optimization does move semantics provide if we already have RVO?

As far as I understand one of the purposes of adding move semantics is to optimize code by calling special constructor for copying "temporary" objects. For example, in this answer we see that it can be used to optimize such string a = x + y stuff. Because x+y is an rvalue expression, instead of deep copying we can copy only the pointer to the string and the size of the string. But as

如果我们已经拥有RVO,移动语义会提供哪些优化?

据我了解,添加移动语义的目的之一是通过调用用于复制“临时”对象的特殊构造函数来优化代码。 例如,在这个答案中,我们看到它可以用来优化这种string a = x + y东西。 因为x + y是一个右值表达式,所以我们只能将指针复制到字符串和字符串的大小,而不是深度复制。 但是,正如我们所知,现代编译器支持返回值优化,所以如果不使用移动语义,我们的代码根本不会调用复制构造函数。 为了证明它,我编写了这段代码: #include

Mettle C++ Test Framework's use of undescore

This question already has an answer here: What are the rules about using an underscore in a C++ identifier? 5 answers Is there something special going on with the use of underscore Underscore is a valid character to use in an identifier. Some uses of underscore in an identifier are reserved for the implementation: What are the rules about using an underscore in a C++ identifier? But none

Mettle C ++测试框架使用非内核

这个问题在这里已经有了答案: 有关在C ++标识符中使用下划线的规则是什么? 5个答案 使用下划线有什么特别的吗? 下划线是在标识符中使用的有效字符。 标识符中下划线的一些用法被保留用于实现:有关在C ++标识符中使用下划线的规则是什么? 但是这些都不适用于块范围内的单个下划线。 它是一个有效的变量名吗? 她的眼睛。 它不会在全局名称空间中。

C++: identifier rules not working

This question already has an answer here: What are the rules about using an underscore in a C++ identifier? 5 answers The text says "The standard also reserves a set of names" - this does not necessarily mean that names of that form will cause a compiler error or warning. It's just that if you choose to use names of that form, they may conflict with other names defined by the

C ++:标识符规则不起作用

这个问题在这里已经有了答案: 有关在C ++标识符中使用下划线的规则是什么? 5个答案 文字说“标准还保留一组名称” - 这并不一定意味着该表格的名称将导致编译器错误或警告。 只是如果您选择使用该表单的名称,它们可能会与编译器或库定义的其他名称发生冲突。 引用意味着不能保证这些名称将起作用:它们可能会与实现使用的名称发生冲突。 正如Mike Seymour在这里写评论时所说的, “你不需要知道标准库中的名字。 你

3 = 'c'` valid in C and C++?

This question already has an answer here: What are the rules about using an underscore in a C++ identifier? 5 answers Can an underscore be used anywhere in an identifier in C? 4 answers All variable names must begin with a letter of the alphabet or an underscore. So yes, it is valid, except if you place it on file scope. (Be careful with double underscore though, it is reserved for the

3 ='c'在C和C ++中有效吗?

这个问题在这里已经有了答案: 有关在C ++标识符中使用下划线的规则是什么? 5个答案 C中的标识符中的任何位置都可以使用下划线吗? 4个答案 所有变量名称必须以字母或下划线开头。 所以是的,它是有效的,除非你把它放在文件范围内。 (尽管如此,请谨慎使用双下划线,它仅供编译器内部使用) 然而,我不会推荐具有这种名称的变量,因为它可能会让读者感到困惑。 从C ++ 2003标准: 17.4.3.1.2全局名称[lib.glo

Class members prefixed with underscore (

This question already has an answer here: What are the rules about using an underscore in a C++ identifier? 5 answers From the C++03 standard: §17.4.3.1.2/1 Certain sets of names and function signatures are always reserved to the implementation: Each name that contains a double underscore ( __ ) or begins with an underscore followed by an upper-case letter (2.11) is reserved to the imple

带有下划线前缀的类成员(

这个问题在这里已经有了答案: 有关在C ++标识符中使用下划线的规则是什么? 5个答案 来自C ++ 03标准:§17.4.3.1.2/ 1 某些名称和功能签名集始终保留给实施: 每个包含双下划线( __ )的名称或以下划线开头且后面跟着大写字母(2.11)的名称保留给实施用于任何用途。 每个以下划线开头的名称都保留给实现,以用作全局名称空间中的名称。 等效文本存在于C ++ 11§17.6.4.3.2/ 1中 我个人使用m_name ,'m'