delphi 64位汇编中的.noframe是什么?

时间:2015-11-07 16:59:31

标签: delphi assembly

delphi 64位汇编中的.noframe是什么?

我见过像这样的x64汇编代码。

procedure test;
{$IFDEF CPUX64}
asm
  .noframe
..
..

.noframe是什么意思?我为什么要关心?

3 个答案:

答案 0 :(得分:2)

来自documentation

  

只要没有声明局部变量且参数​​计数< = 4,就强制禁用堆栈帧的生成。仅对叶子函数使用

叶子函数是不调用其他函数的函数。这是一个总是在调用树底部的。

答案 1 :(得分:1)

来自http://blogs.embarcadero.com/abauer/2011/10/10/38940

.NOFRAME

某些功能永远不会调用其他功能。这些被称为“叶子”函数,因为它不会对其他函数进行任何进一步的“分支”,所以像树一样,它们代表“叶子”对于诸如此类的函数,具有完整的堆栈帧可能是额外的开销你想要消除。虽然编译器确实试图消除堆栈帧,但有时候它根本无法自动解决这个问题。如果您确定不需要帧,则可以使用此指令作为编译器的提示。

答案 2 :(得分:0)

据我所知,正确的答案并不意味着“叶功能”状态。 确定可以使用.noframe

  1. 如上所述,参数计数≤4;
  2. 您不需要为局部变量创建框架,
  3. 您要从该例程调用的所有函数的(1),(2)和(3)也是如此。

如果“叶子函数”语句为true,则意味着您根本不会在此类函数中使用堆栈。