delphi – 何时为局部变量分配空间?
例
function Test: Boolean; var a,b,c: Integer; begin ... end; 当执行包含这样的代码的程序时,每次调用Test时是分配a,b和c,还是在执行的初始化阶段只分配一次?我问这个是因为调试器中没有这样的信息. 解决方法
这是一个更精确的版本.
分配局部变量: >通常在堆栈上; 如何分配堆栈? 在x86和x64方案上,编译器具有相同的过程: >它首先在编译时计算所需的所有空间; 大多数情况下,会创建一个“堆栈帧”(由寄存器EBP指向):它用于直接访问堆栈上分配的所有变量. 对函数的结果变量有一个特定的处理:有时,它是一个CPU / FPU寄存器,有时,它是由调用者初始化的变量,并作为附加参数传递. 在x64上,它有点复杂,因为异常处理不相同,并且如果存在内部调用,则所有寄存器都需要在堆栈上分配一些空间. 在Mac OS上,存在一些对齐问题. 所有这些堆栈分配/初始化过程就是为什么对于一些小函数/方法,将内联声明它们会使代码更快执行:如果函数内的进程非常简单,所有这些堆栈处理有时会很慢. 对于more details,see the official Delphi documentation. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |