2010-02-25 39 views

回答

11

该选项是安全的,但使调试更难。通常,C编译器输出存储在传统寄存器(x86上的ebp)指向该函数的堆栈帧的指针的代码。调试器使用它来打印出局部变量内容和其他信息。 标志指示gcc不要打扰该寄存器。在某些情况下,这可能会略微提高性能,主要是由于代码占用空间(这对缓存更好)以及额外的可用寄存器(特别是在32位模式下的x86上,这在寄存器上非常不足)。

+0

@Thomas能否提供一些链接(如果您知道)关于您提到的注册详细信息。 – Adil 2010-02-25 14:57:08

+0

请参阅http://refspecs.freestandards.org/elf/,特别是针对特定处理器体系结构的“应用程序二进制接口”文档。在用于i386的ABI中,标准堆栈帧格式(使用'ebp')在第36页中描述。ELF格式对许多“现代”类Unix系统(例如Linux和FreeBSD)来说都是常见的。在Windows系统上,情况略有不同,但使用相同的原则。 – 2010-02-25 15:20:12

2

只要你的代码不依赖于未定义的行为,那么它是完全安全的。它可能会导致未定义的行为错误出现。

相关问题