Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
-fomit帧指针,使用安全吗? 我在很多地方看到人们经常在编译C/C++代码时使用选项 fimt框架指针< /> >,我想知道,这个选项是否安全使用?它是用来干什么的_C++_C_Optimization_Gcc - Fatal编程技术网

-fomit帧指针,使用安全吗? 我在很多地方看到人们经常在编译C/C++代码时使用选项 fimt框架指针< /> >,我想知道,这个选项是否安全使用?它是用来干什么的

-fomit帧指针,使用安全吗? 我在很多地方看到人们经常在编译C/C++代码时使用选项 fimt框架指针< /> >,我想知道,这个选项是否安全使用?它是用来干什么的,c++,c,optimization,gcc,C++,C,Optimization,Gcc,非常感谢,祝您好运。只要您的代码不依赖于未定义的行为,那么它是完全安全的。但是,它可能会导致出现未定义的行为错误。该选项是安全的,但会使调试更加困难。通常,C编译器输出代码,该代码在常规寄存器(x86上的ebp)中存储指向函数堆栈帧的指针。调试器使用它来打印局部变量内容和其他此类信息。-fomit frame pointer标志指示gcc不要使用该寄存器。在某些情况下,这可能会产生轻微的性能提高,主要是由于减少了代码占用(这对缓存更好)和额外的可用寄存器(特别是在32位模式下的x86上,这是众所

非常感谢,祝您好运。

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

该选项是安全的,但会使调试更加困难。通常,C编译器输出代码,该代码在常规寄存器(x86上的ebp)中存储指向函数堆栈帧的指针。调试器使用它来打印局部变量内容和其他此类信息。
-fomit frame pointer
标志指示gcc不要使用该寄存器。在某些情况下,这可能会产生轻微的性能提高,主要是由于减少了代码占用(这对缓存更好)和额外的可用寄存器(特别是在32位模式下的x86上,这是众所周知的寄存器不足)。

@Thomas您能否提供一些关于您提到的寄存器详细信息的链接(如果您知道的话)。请参阅,特别是针对特定处理器体系结构的“应用程序二进制接口”文档。在i386的ABI中,第36页描述了标准堆栈帧格式(使用
ebp
)。ELF格式在许多“现代”类Unix系统(如Linux和FreeBSD)中很常见。在Windows系统上,情况略有不同,但使用相同的原则。