【问题标题】:How to disable RBP frame pointer register optimization in GCC when using -O*?使用 -O* 时如何在 GCC 中禁用 RBP 帧指针寄存器优化?
【发布时间】:2015-01-25 13:47:17
【问题描述】:

当我使用gcc -O2 优化我的程序时,gcc 会更改寄存器 RBP 的值。但是我想把它保留为FRAME BASE REGISTER,怎么做呢?

不是同一个问题:GCC: Prohibit use of some registers

【问题讨论】:

  • 不可能禁止使用RSP。而且这和寄存器分配关系不大,因为 RSP 和 RBP 不是通用寄存器
  • 除非您真的需要%rbp 用于其他目的,否则这并没有多大用处。 x86-64 的注册压力较小。
  • 感谢您的回答,很抱歉我没有清楚地描述我的问题,正如@Lưu Vĩnh Phúc 所说:“跟踪堆栈框架”是关键词。 :)

标签: gcc optimization x86-64 stack-frame register-allocation


【解决方案1】:

-fomit-frame-pointer 在优化级别 -O、-O2、-O3、-Os 时默认启用

你需要使用-fno-omit-frame-pointer

但是,除非您正在调试并且需要跟踪堆栈帧,否则没有太多理由保留帧指针。在这种情况下,请改用-Og

【讨论】:

  • 谢谢,我用-fno-omit-frame-pointer解决了我的问题! :) 我确实想实时跟踪堆栈帧并将它们保存到日志中,但不是调试,所以我认为使用 -fno-omit-frame-pointer 是一个好方法。 :)
  • perf 使用有效的帧指针堆栈跟踪而不需要 .eh_frame 展开元数据会很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2012-03-04
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多