关于-fno-omit-frame-pointer与-fomit-frame-pointer
来源:互联网 发布:淘宝网官网注册 编辑:程序博客网 时间:2024/06/06 01:29
转: http://www.trueeyu.com/?p=1694
在GDB core的时候,经常去查看EBP,ESP寄存器,来查找一些有用的调用信息,但是感觉这个EBP,ESP中值的变化,并不是像书中描述的那种函数调用的标准流程。
在用perf做性能分析,打印函数的调用路径时,打印调用路径也有问题。
后来才清楚,原来是-fno-omit-frame-pointer这个优化导致的问题。
下面以一个实例来说明:
#include <stdio.h>int add(int a, int b){ return a + b;}int main(void){ int sum = 0; sum = add(1, 2); printf("%d\n", sum); return 0;}
gcc -o a.s -S a.c -fno-omit-frame-pointer
vim a.s
add函数汇编:
.LFB0: .cfi_startproc pushq %rbp #保存栈基址 .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp #将栈顶做为新的栈基址 .cfi_def_cfa_register 6 movl %edi, -4(%rbp) movl %esi, -8(%rbp) movl -8(%rbp), %eax #取参数1 movl -4(%rbp), %edx #取参数2 leal (%rdx,%rax), %eax #相加 leave .cfi_def_cfa 7, 8 ret #返回
gcc -o a.s -S a.c -fomit-frame-pointer
vim a.s
add函数汇编
add:
.LFB0: .cfi_startproc movl %edi, -4(%rsp) #取参数1 movl %esi, -8(%rsp) #取参数2 movl -8(%rsp), %eax movl -4(%rsp), %edx leal (%rdx,%rax), %eax #相加 ret
从汇编结果可以看出,第二种少了几条切换栈基址的指令,会有性能提升,但会带来一个问题,由于没有存储rbp,那么从add函数并不能追溯整个函数的调用栈。
比如,当perf采样到add函数内的时候,它只能打印当前的指令是在哪个函数内,但不能打印整个调用函数栈。
0 0
- 关于-fno-omit-frame-pointer与-fomit-frame-pointer
- GCC -fno-omit-frame-pointer
- fomit-frame-pointer, Oy
- gcc -fomit-frame-pointer选项,-fno-dwarf2-cfi-asm 选项
- gcc -fomit-frame-pointer 选项与软件优化与调试
- 【转】-fomit-frame-pointer的作用
- BUG when using GYP_DEFINES+=" profiling=1 release_extra_cflags=-fno-omit-frame-pointer disable_pie=1
- GCC的-fomit-frame-pointer编译选项的含义
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer .
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer
- GCC 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer .
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer
- 《coredump问题原理探究》Linux x86版3.5节栈布局之-fomit-frame-pointer编译选项
- unrecognized command line option "-frame-pointer"解决方法
- 第五章 (回溯法)最大团问题
- 22个值得收藏的Android开源代码-UI篇
- Android相关汇总网站和相关开源信息
- C语言printf函数格式化打印之长整型
- poi的各个版本
- 关于-fno-omit-frame-pointer与-fomit-frame-pointer
- JS控制图片显示的大小(图片等比例缩放)
- PHP--时区配置
- PHP 中的随机数——你觉得可靠么?
- java集合基础总结
- selenium操作日历控件(java版本)
- word嵌入表格,完美解决报表
- 微博客户端授权的时候不回调WeiboAuthListener里面的方法
- 三星手机调用系统相机 activity被销毁