【发布时间】:2019-08-19 09:12:23
【问题描述】:
我不确定这是如何特定于语言的,但特别是在 PHP 中,如果某些函数永远不会返回,你会在调用堆栈中泄漏内存吗?
例如,假设您有一个带有 redirect()(或 C 中的 goto)语句的长函数,语言或环境如何知道删除堆栈的该帧?有没有一种方法可以确定永远不会返回的堆栈帧?
【问题讨论】:
-
if functions don't return到底是什么意思?如果不返回,函数会做什么?how does the language or environment know to delete that frame of the stack? Is there a method it uses to determine a stack frame will never be returned to?这没有任何意义。该函数要么返回,要么不返回,在这种情况下,它仍在运行。没有办法不返回也不运行,除非你exit,在这种情况下整个VM都被破坏了。 -
例如,PHP 中的 redirect() 语句或 C 中的 goto。这意味着函数不会返回,对吗?据我了解,CPU 会分支到其他一些执行线程。 PHP 环境是否维护自己的调用堆栈?
-
什么是重定向语句?
-
PHP 中的 redirect() 停止在当前 PHP 脚本上执行,并使用自己的 PHP 脚本定向到另一个页面。到目前为止,我认为 PHP Zend 引擎为每个加载的页面维护一个堆栈。会继续研究
标签: php memory-management memory-leaks stack-trace