c - 自动 assembly 循环级分析

标签 c assembly loops profiling dtrace

有人知道汇编循环级分析器吗?

我一直在使用 gprof,但 gprof 隐藏了循环,它是函数级别的分析,但为了优化我的代码,我想要一些东西进入循环级别。我希望它是自动化的,只给我像 gprof 一样的输出。有人建议我去 dtrace,但我不知道要开始。无论如何,任何人都可以指导我吗? 例如

main:

pushl   %ebp     
movl    %esp, %ebp     
subl    $16, %esp     
movl    $5000000, -4(%ebp)     
movl    $0, -12(%ebp)     
movl    $0, -8(%ebp)    
jmp .L2 

.L3:   

 movl    -8(%ebp), %eax    
 addl    %eax, -12(%ebp)    
 addl    $1, -8(%ebp) 

.L2:    

movl    -8(%ebp), %eax    
cmpl    -4(%ebp), %eax    
jl  .L3     
movl    $0, %eax    
leave     ret 

例如,在 gprof 中,它会说 main 执行了 1 次,而 foo 执行了 100 次。但我想知道 L2 或 L3 是否执行了 100 万次,那么我的优化重点就在这里。 如果我的问题含糊不清,请让我解释更多 谢谢

最佳答案

这取决于您使用的操作系统,但对于这种分析,您通常希望使用采样分析器而不是仪表化分析器,例如

关于c - 自动 assembly 循环级分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4592335/

相关文章:

Python:为列表中的所有元素添加相同的前缀

将多个 if 更改为循环?

c - Linux opengl es 2.0 来自 windows

C fscanf 读取同一行两次?

在 c 中释放双指针的干净方法

c - 为什么 char* 可以在 C 中保存单个 char?

loops - 使用 for 循环将元素添加到 F# 中的 Map

assembly - 如何仅使用 mov、add、sub、neg 限制 4 条指令中的 x=2a+3b?

c - `push' 的操作数类型不匹配

delphi - 如何获取内部System.pas函数的地址?