小编Joh*_*ugo的帖子

Perf注释,仅显示源代码

我正在使用Perf来执行一些分析实验.

但是,我想知道特定代码区域的结果,并且在这种情况下,查看每行源代码(在本例中为C/C++)的结果(百分比)将简化任务.

perf annotate有一个视图,它显示ASM +源代码,也可以选择关闭显示源代码.我想知道如何完成此选项的另一端,即仅显示源代码+其每行事件的百分比并隐藏ASM输出.这有可能perf吗?

建议使用其他工具吗?我也在使用Vtune但是我想做的分析没有用.Valgrind是不可能的,太慢了.

我正在使用运行Ubuntu 13.04的x64.

linux performance linux-kernel perf

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

使用llvm-prof收集LLVM边缘概要分析

我正在使用这些命令编译下面的代码,以便在trunk-llvm中收集边/块分析:

clang -emit-llvm -c sort.c -o sort.bc
opt -insert-edge-profiling sort.bc -o sort_prof.bc
clang sort_prof.bc -lprofile_rt -L/llvms/lib -o sort_prof
Run Code Online (Sandbox Code Playgroud)

然后我运行程序并使用llvm-prof sort_prof.bc显示分析信息,结果是:

===-------------------------------------------------------------------------===
Function execution frequencies:

 ##   Frequency
  1. 4.3e+05/708539 main
  2. 2.8e+05/708539 quickSort

  NOTE: 2 functions were never executed!
.....
Run Code Online (Sandbox Code Playgroud)

我的问题是关于执行频率.有没有意义主要执行4.3e + 05次?为什么这样?我正在编译的代码如下.

###################### sort.c ########################
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

const int MAX = 1000000;

void swap(int* a, int* b) {
  int tmp;
  tmp = *a;
  *a = *b;
  *b = tmp;
}

int partition(int vec[], int left, int …
Run Code Online (Sandbox Code Playgroud)

compiler-construction profiling llvm

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

访客模式:访客或访问对象是否应该决定访问顺序?

我已经看过两种方式的例子,特别是维基百科显示了访问对象决定访问顺序的一个例子,我认为这是一种听起来很好的方法.

我处于这种情况,我需要几个访问订单,所以让访客决定访问订单似乎是合理的.但是,如果访问者负责访问顺序(即,用于调用被访问对象的accept方法),我可以让访问者直接调用一些访问方法(即,绕过访问对象的accept方法的调用)和这似乎与模式提出的完全相反.

在我们有多个不同的访问订单时,实施访问模式以及如何处理的正确方法是什么?

design-patterns visitor

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

为什么底部测试循环更可取?

我听说有人说编译器经常将循环条件移到循环的底部.也就是说,像这样的循环:

while (condition) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

改为:

if (condition) {
     do {
         ...
     } while (condition);
}
Run Code Online (Sandbox Code Playgroud)

关于机器独立优化,为什么后者更可取?

compiler-construction x86 assembly gcc llvm

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

程序加载/执行

我是编译器的初学者,但我对了解程序的结构(二进制)以及如何在内存中读取和加载以执行非常感兴趣。你们建议我阅读哪些电子书/书籍/教程以快速入门?

c++ linux gcc elf llvm

4
推荐指数
2
解决办法
1458
查看次数

用户定义类型的向量

在尝试编译此代码时:

#include <iostream>
#include <vector>
using namespace std;

class Test {
    int a;

public:
    Test(int pa) : a(pa) { }

    void print() {
        std::cout << a << std::endl;
    }
};

int main() {

    Test t(31415);

    t.print();

    vector<Test &> vet;

    vet.push_back(&t);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc 4.4.5-8报告各种错误,从:

In file included from /usr/include/c++/4.4/i486-linux-gnu/bits/c++allocator.h:34,
                 from /usr/include/c++/4.4/bits/allocator.h:48,
                 from /usr/include/c++/4.4/string:43,
                 from /usr/include/c++/4.4/bits/locale_classes.h:42,
                 from /usr/include/c++/4.4/bits/ios_base.h:43,
                 from /usr/include/c++/4.4/ios:43,
                 from /usr/include/c++/4.4/ostream:40,
                 from /usr/include/c++/4.4/iostream:40,
                 from references.cpp:1:
/usr/include/c++/4.4/ext/new_allocator.h: In instantiation of ‘__gnu_cxx::new_allocator<Test&>’:
/usr/include/c++/4.4/bits/allocator.h:87:   instantiated from ‘std::allocator<Test&>’
/usr/include/c++/4.4/bits/stl_vector.h:71:   instantiated from ‘std::_Vector_base<Test&, std::allocator<Test&> …
Run Code Online (Sandbox Code Playgroud)

c++ gcc allocation reference

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

识别python中的动词时态

如何使用Python + NLTK来识别句子是指过去/现在/将来?

我只能使用POS标记吗?这似乎有点不准确,在我看来,我需要考虑句子上下文而不仅仅是单词.

对于另一个可以做到这一点的图书馆的任何建议?

python text-processing nlp machine-learning nltk

4
推荐指数
2
解决办法
4359
查看次数

值类型的依赖注入

我正在创建一个 Azure Service Fabric 服务,并依靠本机 .NET 框架通过构造函数进行依赖项注入。问题是:其中一个构造函数将值类型(特别是 System.TimeSpan)作为参数。我应该/如何使用依赖注入框架注册这种类型?

澄清一下:我试图遵循此处显示的示例:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection#service-lifetimes-and-registration-options

c# dependency-injection azure microservices azure-service-fabric

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

真的有 Flex++ 扫描仪吗?

我在 Debian Squeeze 上运行,并使用 apt-get install flex 安装了 flex/flex++。

不过我注意到 flex++ 只是一个指向 flex 的符号链接。那么,真的存在一个生成 C++ 扫描仪的“程序”flex++,还是只是一个我应该切换的 Flex 标志?

另外,常见的问题是:互联网上的许多示例无法在flex或flex++下“编译”。Flex 出现以下错误:

test.lex:1: invalid character: %
...
Run Code Online (Sandbox Code Playgroud)

当仅使用以下命令处理输入时:

%name Test
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?

Flex/Flex++ 版本为 2.5.35

c++ yacc lex bison flex++

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

Linux ELF 32位加载

我正在写一个x86二进制解释器.

目前我正在处理加载可执行文件和共享对象.但是我有些疑惑:

1)动态链接器/加载器是否连接主可执行文件和共享库的.ini部分,以便为进程映像生成一个.ini部分?对于.fini部分?

2)它是否连接了许多符号和字符串表?

3)我对重新安置感到失望.它们应该在二进制加载时或者在调用过程时发生?我想我不明白动态链接器/加载器如何管理重定位.

4)为什么存在.hash和.gnu.hash部分?为什么我需要'哈希'一个符号?

欢迎链接,评论和明显的答案.

c++ linux compiler-construction interpreter elf

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