omit-frame-pointer 开启该选项,主要是用于去掉所有函数SFP(Stack Frame Pointer)的,即在函数调用时不保存栈帧指针SFP,代价是不能通过backtrace进行调试根据堆栈信息了。通过去掉SFP,可以提高程序运行速度,达到优化程序的目的。如果要打开栈指针,使用-fno-omit-frame-pointer。 另外一个类似选项-fomit-leaf-frame-pointer...
可以看到不加-fomit-frame-pointer选项编译出来的代码少了一些,最主要的区别是少了栈帧的切换和栈地址的保存,栈是从高地址向低地址扩展,而堆是从低地址向高地址扩展。在x86体系结构中,栈顶寄存器是esp,栈底寄存器位ebp,esp的值要小于ebp的值。函数调用时先将函数返回值、传入参数依次压入栈中,CPU访问时采用0x8...
backtrace与fomit-frame-pointer选项 事实上gcc的所有级别的优化(-O, -O2, -O3等)都会打开-fomit-frame-pointer,该选项的功能是函数调用时不保存frame指针,在ARM上就是fp,故我们无法按照APCS中的约定来回溯调用栈。但是GDB中仍然可以使用bt命令看到调用栈,为什么?得知GDB v6之后都是支持DWARF2的,也就意味着它可以...
2、gcc选项-fomit-frame-pointer gcc文档中对该选项的解释如下: Don’t keep the frame pointer in a register for functions that don’t need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions. It also makes ...
该模式下在不影响调试的状况下还会打开‘-fomit-frame-pointer优化项。 同时该模式不会为Ada编译器打开‘-ftree-sra’优化项,如需要则请使用命令参数输入‘-ftree-sra’进行优化。 -O2 进一步优化.GCC执行几乎所有支持的操作但不包括空间和速度之间权衡的优化。 -O2优化等级下,并不执行循环展开和函数“内联”优化...
-fomit-frame-pointer编译选项去掉了 push %ebp mov %esp,%ebp//这两条指令安装 leave//这条指令恢复 -O2编译选项去掉了 add $0x4,%esp 两个加起来会不会这四条指令一起去掉,从而使stack不平衡呢? [alert7@redhat62 alert7]$ gcc -fomit-frame-pointer -O2 -o test test.c ...
omit- frame-pointer:可能的情况下不产生栈帧; -O2:以下是-O2在-O1基础上增加的优化选项: -falign-functions -falign-jumps -falign-loops -falign-labels -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse ...
-fomit-frame-pointer对于不需要栈指针的函数就不在寄存器中保存指针,因此可以忽略存储和检索地址的代码,同时对许多函数提供一个额外的寄存器。所有"-O"级别都打开它,但仅在调试器可以不依靠栈指针运行时才有效。在AMD64平台上此选项默认打开,但是在x86平台上则默认关闭。建议显式的设置它。-falign-functions=N-...
-Oy[-] 启用框架指针省略 enable frame pointer omission -Oi 启用内建函数 enable intrinsic functions 代码生成 -G3 为 80386 进行优化 optimize for 80386-G4 为 80486 进行优化 optimize for 80486-GR[-] 启用 C++ RTTI enable C++ RTTI-G5 为 Pentium 进行优化 optimize for Pentium-G6 为 Pentium Pro...
CXXFLAGS="-march=pentium -O3 -pipe -fomit-frame-pointer" Pentium MMX (Intel): CHOST="i586-pc-linux-gnu" CFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer" CXXFLAGS="-march=pentium-mmx -O3 -pipe -fomit-frame-pointer"